cannot assign to struct field counts[key].Count in map

环境

  • windows amd64 go1.19

代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
type strVal struct {
	Count     int
	Filenames []string
}
func main() {
	counts := make(map[string]strVal)
    key := "key"
    _, ok := counts[key]
    if ok {
        counts[key].Count++
        counts[key].Filenames = append(counts[key].Filenames, "name")
    }
}

此时,counts[key].Count++ 这里报错。

cannot assign to struct field counts[key].Count in map

查找资料之后得知,map 中的 value 的地址是变化的,会随着动态扩容发生变化,所以不可寻址,即不可对其进行更改。

方法

既然这样,我们可以将 map 的value 值设置为 指针,这样就有了一个固定的指针,即可对其进行更改。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
type strVal struct {
	Count     int
	Filenames []string
}
func main() {
	counts := make(map[string]*strVal)
    key := "key"
    _, ok := counts[key]
    if ok {
        counts[key].Count++
        counts[key].Filenames = append(counts[key].Filenames, "name")
    }
}