Dictionary 如何在围棋中修改地图
我试图修改“环回”的IPAddr,但它似乎无法直接访问元素Dictionary 如何在围棋中修改地图,dictionary,go,Dictionary,Go,我试图修改“环回”的IPAddr,但它似乎无法直接访问元素 addrs["loopback"][0] = byte(2) //cannot assign to addrs["loopback"][0] 我怎样才能在go内完成 package main import "fmt" type IPAddr [4]byte func main() { addrs := map[string]IPAddr{ "loopback": {127, 0, 0, 1},
addrs["loopback"][0] = byte(2) //cannot assign to addrs["loopback"][0]
我怎样才能在go内完成
package main
import "fmt"
type IPAddr [4]byte
func main() {
addrs := map[string]IPAddr{
"loopback": {127, 0, 0, 1},
"googleDNS": {8, 8, 8, 8},
}
addrs["loopback"][0] = byte(2)
for n, a := range addrs {
fmt.Printf("%v: %v\n", n, a)
}
}
由于映射值不可寻址,因此需要重新分配整个值:
addr := addrs["loopback"]
addr[0] = 2
addrs["loopback"] = addr
如果将映射值类型更改为*IPAddr,则分配
addrs["loopback"][0] = 2
工作。在这种情况下,代码将指定给映射指向的值。此值是可寻址的
我想知道为什么它是不可变的。映射应该类似于Python中的dic,可以直接修改。这不是一个好的比较,因为Python没有像Go的数组类型那样的类型a。如果Python有一个类似Go的数组类型,我认为同样的规则也适用。映射实现者可以自由地在内存中移动值。。映射值是可变的,只是不可寻址。实现它的另一种方法是将IPAddr定义为片:键入IPAddr[]字节