package main
import (
"fmt"
)
type disk struct {
read string
write string
}
func main() {
var a = map[string]disk{
"xvda": disk{ "5656418", "22438120" },
"xvdb": disk{ "8493386", "1149266272" },
}
var b = map[string]disk{
"xvda": disk{ "11", "22" },
"xvdb": disk{ "33", "44" },
}
for key, val := range a {
b[key].read = val.read
b[key].write = val.write
}
fmt.Println(b)
}
帮忙看下为什么这段代码编译不通过,报错:
/test.go:24: cannot assign to b[key].read
./test.go:25: cannot assign to b[key].write
赋值操作的左值必须是可寻址的(addressable)的。
而map index表达式不是一个有效的可寻址表达式。
你可以试试println(&a["xvda"]),这样是不能通过编译的
为什么会这样呢?因为哈希表在运行时内存布局会变的,Go为了更有效的利用内存,map的内部实现可能会对哈希表进行重排,这样内部的值内存地址就会变化,所以Go不允许寻址map index表达式。
有两种解决方案:
map的值存成指针map[string]*disk