У меня есть функция:Использование карты [строка] INT в качестве параметра типа карты [интерфейс {}] Интерфейс {}
func ReturnTuples(map_ map[interface{}]interface{}) [][]interface{} {
В котором я пытаюсь назвать так:
m := make(map[string]int)
m["k1"] = 7
m["k2"] = 13
fmt.Println(ReturnTuples(m))
Но я получаю
cannot use m (type map[string]int) as type map[interface {}]interface {} in argument to ReturnTuples
не должна ли она работать так string
и int
как реализовать interface{}
?
Я искал, и лучшее, что я мог найти, было Convert map[interface {}]interface {} to map[string]string, но оно не ответит, почему я не могу использовать m
в качестве аргумента.
Я также считаю, что если аргумент функции был только interface{}
, это тоже сработало бы, так как map[something][something]
реализует interface
, правильно? Каков наилучший способ сделать это, и почему это не будет работать в моем случае?
https://golang.org/doc/faq#covariant_types – Volker
@ Volker, но я не вижу неправильного типа метода, я даже не применял тип метода, так как я просто печатаю возвращаемое значение функции. Проблема, как говорит компилятор, относится к типу аргумента –
Причина, по которой вы не можете передать 'map [string] int', поскольку это' map [interface {}] interaface {} '- это' string', 'int', и 'interface {}' все имеют разную структуру данных. 'string' - это единственный указатель, который может быть 64 бит,' int', возможно, подписан 64-битным значением, однако 'interface {}' является структурой двух указателей с именем [emptyInterface] (https://golang.org/src/reflect/value .go # L174) – ymonad