美文网首页
golang copy

golang copy

作者: sanerersan | 来源:发表于2018-04-11 22:57 被阅读0次

    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

          本文链接:https://www.haomeiwen.com/subject/frrtkftx.html