Mam funkcję:Używanie map [ciąg] int jako parametr typu map [interfejs {}] interfejs {}
func ReturnTuples(map_ map[interface{}]interface{}) [][]interface{} {
W którym staram się nazwać tak:
m := make(map[string]int)
m["k1"] = 7
m["k2"] = 13
fmt.Println(ReturnTuples(m))
Ale jestem coraz
cannot use m (type map[string]int) as type map[interface {}]interface {} in argument to ReturnTuples
nie powinien on działać od string
i int
zarówno wdrożenia interface{}
?
Szukałem i najlepsze, co mogłem znaleźć, to Convert map[interface {}]interface {} to map[string]string, ale nie odpowiem, dlaczego nie mogę użyć argumentu w postaci m
.
Wierzę również, że jeśli argument funkcji byłby tylko interface{}
, to też by działało, ponieważ map[something][something]
implementuje interface
, prawda? Jaki jest najlepszy sposób, aby to zrobić i dlaczego nie zadziała w moim przypadku?
https://golang.org/doc/faq#covariant_types – Volker
@Volker, ale nie widzę niewłaściwego sposobu metody, nie wymusiłem nawet tego typu metody, ponieważ właśnie drukuję wartość zwracaną przez funkcję. Problem, jak mówi kompilator, dotyczy typu argumentu –
Powodem, dla którego nie można przekazać 'map [string] int' jako że' map [interface {}] interaface {} 'to' string', 'int', i 'interface {}' all ma inną strukturę danych. 'string' to pojedynczy wskaźnik, który może być 64-bitowy,' int' to być może 64-bitowa wartość podpisu, jednak 'interface {}' to struktura dwóch wskaźników o nazwie [emptyInterface] (https://golang.org/src/reflect/value) .go # L174) – ymonad