golang unsafe 包修改私有属性没加偏移量会有什么隐患?

查看 61|回复 3
作者:Nazz   
type Buffer struct {
        buf      []byte
        off      int
        lastRead int8
}
//go:nosplit
func BufferReset(b *bytes.Buffer, p []byte) {
        buffer := (*Buffer)(unsafe.Pointer(b))
        buffer.off = 0
}

buffer, Unsafe, byte, off

Thiece   
如果你错误地修改了结构体的私有字段,可能会导致数据状态的不一致。例如,可能会影响缓冲区( buffer )的长度和容量,使其不匹配。
bytes.Buffer 的实现在未来版本中发生变化也会出现问题。
Nazz
OP
  
@Thiece 目前没发现影响正确性(后面两个字段的值本来就是 0), 但是增加了一次 allocs 影响了性能
Nazz
OP
  
@Thiece 你能给出一个影响数据长度或内容的 demo 吗
您需要登录后才可以回帖 登录 | 立即注册

返回顶部