成都手機端建站模板百度官方認證
簡介
string與byte的轉(zhuǎn)換是最常見的一種,通常我們會使用強轉(zhuǎn)方式,但其實還有另一種更加高效的方式,本文會演示兩種轉(zhuǎn)換方式。
普通轉(zhuǎn)換
func main() {fmt.Println([]byte("abcd"))fmt.Println(string([]byte{'1', '2', '3'}))
}輸出
[97 98 99 100]
123
高效轉(zhuǎn)換
上面的轉(zhuǎn)換雖然簡單,但是效率不高,因為存在一次拷貝,需要新開辟內(nèi)存,但其實string與[]byte的數(shù)據(jù)結(jié)構(gòu)非常相似,只不過[]
byte多了一個容量大小cap,那么其實只要把值的引用地址切換一下,把cap加上就可以了
而引用地址的轉(zhuǎn)換可以使用unsafe.Pointer做到,當(dāng)然這個不確定高版本會不會再支持,需要注意
轉(zhuǎn)換實現(xiàn)如下
func main() {fmt.Println(StringToBytes("abcd"))fmt.Println(BytesToString([]byte{'1', '2', '3'}))
}func BytesToString(b []byte) string {return *(*string)(unsafe.Pointer(&b))
}func StringToBytes(s string) []byte {return *(*[]byte)(unsafe.Pointer(&struct {stringCap int}{s, len(s)},))
}輸出
[97 98 99 100]
123
歡迎關(guān)注,學(xué)習(xí)不迷路!