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