使用后我们需要清除一些变量。但是当它[]byte在结构中分配一个字段时,它看起来真的很奇怪。为什么这个赋值[]byte不是副本而是指针?我应该怎么做才能将值保留在 struct 中a.bs,但清除bas 局部变量? http://play.golang.org/p/MT_wAHj2OMpackage mainimport "fmt"type so struct { bs []byte}func zeroes(n int) []byte { return make([]byte, n)}func wipeBytes(b []byte) { copy(b, zeroes(len(b)))}func main() { a := so{bs: []byte{0x01, 0x02}} b := a.bs wipeBytes(b) fmt.Println(b) //b == []byte{} fmt.Println(a.bs) //a.bs == []byte{}}
3 回答
人到中年有点甜
TA贡献1895条经验 获得超7个赞
在声明/创建“数组” ( []byte{0x01, 0x02}
) 时,您没有指定长度 ( [2]byte{0x01, 0x02}
),这意味着它是一个切片而不是数组。并且 slices 对象在内部包含一个指向其内容的指针。
浮云间
TA贡献1829条经验 获得超4个赞
切片本质上是参考事物。分配一个不会复制其内容。您可以将切片值视为“切片头”结构,其中包含指向切片底层数组的指针,以及数组内切片的偏移量和长度。复制切片时复制的是这个结构,而不是数组中的任何值。
你可以做
b := make([]byte, len(a.bs)))
copy(b, a.bs)
制作b一个新切片并将a.bs的内容复制到其中。那么你对一个人所做的任何事情都不会对另一个人产生任何影响。
- 3 回答
- 0 关注
- 215 浏览
添加回答
举报
0/150
提交
取消