2013-04-11 8 views
5

że chcemy określić typ takiego:nieprawidłowe działanie: s u [k] (wskaźnik typu * s)

type S map[string]interface{} 

i chcemy dodać metodę typu jak to:

func (s *S) Get(k string) (interface {}){ 
    return s[k] 
} 

gdy program działa, to był błąd tak:

invalid operation: s[k] (index of type *S) 

Tak, jak mogę określić rodzaj i dodać metodę do rodzaju?

Odpowiedz

10

Na przykład

package main 

import "fmt" 

type S map[string]interface{} 

func (s *S) Get(k string) interface{} { 
    return (*s)[k] 
} 

func main() { 
    s := S{"t": int(42)} 
    fmt.Println(s) 
    t := s.Get("t") 
    fmt.Println(t) 
} 

wyjściowa:

map[t:42] 
42 

Mapy są typy referencyjne, które zawierają wskaźnik do podstawowej mapy, więc zwykle nie trzeba użyć wskaźnika dla s . Dodałem metodę , aby podkreślić punkt. Na przykład,

package main 

import "fmt" 

type S map[string]interface{} 

func (s S) Get(k string) interface{} { 
    return s[k] 
} 

func (s S) Put(k string, v interface{}) { 
    s[k] = v 
} 

func main() { 
    s := S{"t": int(42)} 
    fmt.Println(s) 
    t := s.Get("t") 
    fmt.Println(t) 
    s.Put("K", "V") 
    fmt.Println(s) 
} 

wyjściowa:

map[t:42] 
42 
map[t:42 K:V] 
+3

może wyłożyć nieco na wartości wskaźnika vs odbiorników i dlaczego mapa może pracować z odbiornika wartości? – cthom06

Powiązane problemy