gpt4 book ai didi

go - 为什么 golang 在 slice 和 map 之间的 `[]` 运算符上实现不同的行为?

转载 作者:数据小太阳 更新时间:2023-10-29 03:44:18 25 4
gpt4 key购买 nike

<分区>

type S struct {
e int
}

func main() {
a := []S{{1}}
a[0].e = 2

b := map[int]S{0: {1}}
b[0].e = 2 // error
}

a[0] 是可寻址的,但 b[0] 不是。

我知道第一个 0 是一个索引,第二个 0 是一个键。

为什么golang会这样实现?有什么进一步的考虑吗?


我已经阅读了github.com/golang/go/src/runtimemap 的源代码如果 maxKeySizemaxValueSize 足够小,并且映射结构已经支持 indirectkeyindirectvalue

type maptype struct {
...
keysize uint8 // size of key slot
indirectkey bool // store ptr to key instead of key itself
valuesize uint8 // size of value slot
indirectvalue bool // store ptr to value instead of value itself
...
}

我认为如果 golang 设计者想要这种语法,现在它很容易工作。

当然 indirectkey indirectvalue 可能会消耗更多的资源,GC 也需要做更多的工作。

那么性能是支持这个的唯一原因吗?

或任何其他考虑因素?

在我看来,支持这样的语法很有值(value)。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com