【Golang】快速複習指南QuickReview(一)——字符串string

春節期間,再加上疫情,博主學習了幾天Golang,之後便缺乏使用。這幾天看到一些Golang項目的源碼,發現自己對Golang好像有點不熟,爲了加深自己的記憶,艾賓浩斯記憶遺忘曲線告訴我們:要勤於複習。作爲一個C#使用頻率超高的.NET開發者,預備在接下來採用:C#與Golang的對比,以Golang爲主,C#爲輔的複習系列。既然是複習,所以面不會全部覆蓋,所以這個系列並不是教程,如果想系統的學習,博主可推薦。

golang相對於其他語言(C#,python等),語法糖相對較少。大家都知道C#和python的語法糖很多,特別是python,有時候讀別人寫過的源碼,不一定都能快速讀懂,甚至幾個開發人員寫的都不一樣,而Golang不同,Golang只要堅持打牢基礎,就能讀取任意源代碼,並能讀懂源,所以需要打牢基礎(這也說明博主基礎並不牢靠)。

String-字符串

1.C#的字符串

字符串在C#中,是一個特殊的類型,不能簡單把它歸納爲值類型,或者引用類型。需要記住的有兩點:

  • 1.無論對字符串做什麼操作,都會在內存中生成一個新的實例,即使是一個簡單的重新賦值操作。
  • 2.string字符串可以看作一個只讀數組。
string name="randyfield";
char name_0=name[0];
name[0]="R";//錯誤:內部是一個索引器,public char this[int index] { get; },只讀的

2.Golang的字符串

字符串在Golang中,string頂層是通過byte數組實現的。中文字符在unicode下佔2個字節,在utf-8編碼下佔3個字節,其他沒多少內容,唯一需要注意的就是字符:

  • 如果是英文字符,就用byte,實質是一個int8類型,常用來處理ascii字符
  • 如果是中文、日文或者其他符合字符就用 rune,實在是一個int32類型,常用來處理unicode或utf-8字符

3.字符串翻轉

最後來鞏固一下,用兩者代碼分別實現字符串翻轉:"RandyField 喜歡喫鳳尾!"---"!尾鳳喫歡喜 dleiFydnaR"

3.1 C#實現

string Reverse(string str)
{
    //轉換爲數組
    char[] nameArray = str.ToCharArray();
    for (int i = 0; i < nameArray.Length / 2; i++)
    {
        char temp;
        temp = nameArray[i];
        nameArray[i] = nameArray[nameArray.Length - 1 - i];
        nameArray[nameArray.Length - 1 - i] = temp;
    }
    return new string(nameArray);
}

3.2 Golang實現

func Reverse(str string) string {
    //轉換爲切片
	strSlice := []rune(str)
	for i := 0; i < len(strArray)/2; i++ {
		var temp rune
		temp = strArray[i]
		strArray[i] = strArray[len(strArray)-1-i]
		strArray[len(strArray)-1-i] = temp
	}
	return string(strArray)
}

使用Golang的多重賦值的特性,把髒活累活扔給編譯器,代碼可以更簡單:

func reverse(str string) string {
    //轉換爲切片
	strSlice := []rune(str)
	for i, j := 0, len(strSlice)-1; i < j; i, j = i+1, j-1 {
		strSlice[i], strSlice[j] = strSlice[j], strSlice[i]
	}
	return string(strArray)
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章