golang語言自己就是c的工具集,開發c的程序用到的大部分結構體,內存管理,攜程等,golang基本都有,他只是在這個基礎上又加了一些概念這裏說一個很小的問題,就是字節數組轉string的問題,網上大部分都是這樣轉的(包括google上):string(p[:]),這個轉完了是有問題的,咱們再來看一下string這個結構體:nginx
struct String
{
byte* str;
intgo len;
};golang
這個結構體讓我想起了nginx的string,他是這樣定義的:數組
typedef struct {
size_t len;
u_char *data;
} ngx_str_t;函數
golang裏邊 string的概念其實不是之前遇到\0結尾的概念了,他其實就是一塊連續的內存,首地址+長度,上面那樣賦值,若是p裏邊有\0,他不會作處理這個時候,若是再對這個string作其餘處理就可能出問題了,好比strconv.Atoi轉成int就有錯誤,解決辦法就是須要本身寫一個正規的轉換函數:工具
func byteString(p []byte) string {
for i := 0; i < len(p); i++ {
if p[i] == 0 {
return string(p[0:i])
}
}
return string(p)
}google
這樣就不會出問題了spa