Map 尝试在Go中实现映射合并功能,但失败
最简单的问题复制:Map 尝试在Go中实现映射合并功能,但失败,map,merge,go,Map,Merge,Go,最简单的问题复制: package main import "fmt" type stringMap map[int]string func (s *stringMap) Merge(m stringMap) { for key, value := range m { s[key] = value } } func main() { myMap := stringMap{1: "a", 2: "b"} myMap.Merge(stringM
package main
import "fmt"
type stringMap map[int]string
func (s *stringMap) Merge(m stringMap) {
for key, value := range m {
s[key] = value
}
}
func main() {
myMap := stringMap{1: "a", 2: "b"}
myMap.Merge(stringMap{3: "c"})
fmt.Println(myMap)
}
为什么我不能使用key
变量作为mymap-stringMap
上的键
操场:您不能在指向地图的指针上使用索引(访问地图)
您只需进行以下更改(支付已删除的*):
不能对指向地图的指针使用索引(访问地图)
您只需进行以下更改(支付已删除的*):
Merge
方法的接收器是指向映射的指针,它不支持[]
索引语法。如果将接收器更改为(s stringMap)
,则一切都应按预期工作。合并方法的接收器是指向映射的指针,不支持[]
索引语法。如果将接收器更改为(s stringMap)
,则一切都应按预期工作。您可以将函数接收器更改为正常接收器(如其他人所建议的),或者在函数中取消对其的引用((*s)[key]=value
)您可以将函数接收器更改为正常接收器(正如其他人所建议的),或在函数中取消对它的引用((*s)[key]=value
)哦,纯粹的分心。我习惯于在结构中添加方法,自动使用指针。谢谢!哦,纯粹的分心。我习惯于在结构中添加方法,自动使用指针。谢谢!你认为这样会更好吗?我想也是这样。贴图(和切片)已经存在。使用值接收器似乎更干净。如果要从方法中替换映射(例如从DecodeJSON
方法),可能需要使用带有映射的指针接收器。但在大多数情况下不需要它。您认为这在某种程度上会更好吗?我想也是这样。映射(和切片)已经存在。使用值接收器似乎更干净。如果要从方法中替换映射(例如从DecodeJSON
方法),可能需要使用带有映射的指针接收器。但在大多数情况下,不需要它。
func (s stringMap) Merge(m stringMap) { ... }