golang copy

golang copy函数用于在两个slice之间进行拷贝数据,其拷贝数据的长度为 len(dst)与len(src)之间的最小值,所以以下拷贝的长度为 0 字节:

var bd = make([]byte,100)[:0]

func main() {

    //bd = bd[:len(bd) + 10]

    copy(bd,[]byte{1,2,3})

    fmt.Println(bd)

}

因为 len(bd)等于0

要拷贝成功,必须将代码中的注释打开,使 len(bd)不等于0

所以我们看源码中 buffer.go(src\bytes\buffer.go)的Write* 系列函数,在调用copy之前都会调用一次 

tryGrowByReslice函数,tryGrowByReslice函数定义如下:

func (b *Buffer) tryGrowByReslice(n int) (int, bool) {    

    if l := len(b.buf); n <= cap(b.buf)-l {       

         b.buf = b.buf[:l+n]        

        return l, true    

    }    

return 0, false

}

其作用也是在增大 slice 的 len域。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,918评论 0 38
  • Node.js Buffer(缓冲区) JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。但在...
    FTOLsXD阅读 535评论 0 2
  • 1.安装 https://studygolang.com/dl 2.使用vscode编辑器安装go插件 3.go语...
    go含羞草阅读 1,598评论 0 6