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域。

你可能感兴趣的:(golang copy)