【Golang】快速複習指南QuickReview——字串string
阿新 • • 發佈:2020-11-22
春節期間,再加上疫情,博主學習了幾天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)
}