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