2013-04-11 21 views
5

私はこのようなタイプ定義したい:無効な操作:S [k]は(式* Sの指数)

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

は多分価値受信機対ポインタのビットを詳説する、そしてなぜマップは、値の受信機で動作することができますか? – cthom06

関連する問題