2013-04-11 70 views
5

我要定義一個類型是這樣的(類型* S的指數):無效操作:S [k]的

type S map[string]interface{} 

,我想一個方法添加到這樣的類型:

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

當程序運行時,出現了這樣的錯誤:

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

那麼,如何定義類型和方法添加到類型?

回答

10

例如,

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

輸出:

map[t:42] 
42 

地圖是參考的類型,其含有一個指向基礎映射,所以你通常不會需要使用一個指針s 。我已經添加了一個方法來強調這一點。例如,

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

輸出:

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

也許闡述上指針位VS值接收器,爲什麼地圖可以用一個值傳感器工作嗎? – cthom06 2013-04-11 02:48:35