【发布时间】:2020-05-26 17:25:21
【问题描述】:
实现是
// String returns the accumulated string.
func (b *Builder) String() string {
return *(*string)(unsafe.Pointer(&b.buf))
}
根据我的测试,将 []byte 转换为字符串使用“写入时复制”,或者如果其中一个正在更改内部切片,则编译器会生成深层复制指令:
{
a := []byte{'a'}
s1 := string(a)
a[0] = 'b'
fmt.Println(s1) // a
}
{
a := "a"
b := []byte(a)
b[0] = 'b'
fmt.Println(a) // a
}
如果按如下方式实现会怎样?
// String returns the accumulated string.
func (b *Builder) String() string {
return string(b.buf)
}
【问题讨论】:
标签: go