初级会员
  • 第 4752 位会员
  • sheepbao
  • 1421967301@qq.com
  • 2016-03-26 15:21:59
  • Offline
  • 19 3

最近分享的资源

    暂无

最近发布的项目

    暂无

最近的评论

  • 格式有点乱,为什么不可以实现呢,goroutine结束本来就不影响其他goroutine
  • 评论了主题 [求职] Go 工程师求职
    #史蒂夫软件#坐标SZ-高新园,新项目招服务端开发(c++/go),三年以上,有高并发,高日活项目的研发经验薪资范围20-35K,别的没有,只为在与众不同的地方工作,做个千万日活的棋牌游戏取悦自己,联系方式13713875051(同微信)
  • 这个可以看我文章 [https://sheepbao.github.io/post/golang_escape_analysis/](https://sheepbao.github.io/post/golang_escape_analysis/)
  • 评论了主题 go的string深复制
    深复制还要怎么高效?自己开辟另一个内存空间,copy过去。 ``` a := "12345" b := make([]byte, len(a)) copy(b, a) c := string(b) ```
  • 如果知道c语言的void*指针和string的内存布局,这个问题其实不难,强烈建议看看这门课: `http://open.163.com/special/opencourse/paradigms.html`. unsafe.Pointer相当于void*,也就是无类型指针,可以指向任何地址的指针。 在go中,string的内存布局如下: ``` +---------+ ----------------------- | data | ------> | string的真实内容| +---------+ ----------------------- | len | +---------+ ``` 注意:`这里的的data就是一个指向string内容的指针,len是string的长度,在64位的系统中sizeof(data)==8, sizeof(len)==8, 一共占用16byte`。 这里只解释fun1,其他函数自己按照理解去体会(以下解释默认在64位系统中) ``` a := 2 // 申请一个int类型,占用8byte,其内容为2. c := (*string) (unsafe.Pointer(&a)) // c为*string类型,占用8byte,指向a的指针,a的内容为2 *c = "44" // 将 string==“44”赋值给c,注意我前面讲过一个string占用16byte,而原来的c,也就是a只申请了8byte,超过了你程序申请的字节数,当访问*c的时候,一般情况下你会panic,类似数组越界。 fmt.Println(*c) ```