Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Map 尝试在Go中实现映射合并功能,但失败_Map_Merge_Go - Fatal编程技术网

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) { ... }