2011-07-05 26 views
1

私はGoで非常に新しいです。私はReflection in Goを使用して、どのようにマッピングの価値を得ているのだろうと思っていました。Golangが値を取得するために反射を助けます

 

type url_mappings struct{ 
    mappings map[string]string 
} 

func init() { 
    var url url_mappings 
    url.mappings = map[string]string{ 
     "url": "/", 
     "controller": "hello"} 
 

おかげ

+1

なぜ反射を使用しますか?どのような問題を解決しようとしていますか? – peterSO

+0

私はユーザーに独自のマッピングを持たせようとしています。反射を使ってすべてのパターンをチェックします。 GrailsのURL_Mappingsと似ています。 :) – toy

+0

@toy:反射が必要な理由はまだ分かりません – newacct

答えて

5
import "reflect" 
v := reflect.ValueOf(url) 
f0 := v.Field(0) // Can be replaced with v.FieldByName("mappings") 
mappings := f0.Interface() 

mappingsのタイプは、インタフェース{}であるので、あなたは、マップとして使用することができません。そのため、繰り返しmap[string]string

realMappings := mappings.(map[string]string) 
println(realMappings["url"]) 

、私は希望:

type mappings map[string]string 

そしてあなたそれのタイプがmap[string]stringで、あなたには、いくつかのtype assertionを使用する必要がありますことを本当のmappingsを持っている 缶詰:

type url_mappings struct{ 
    mappings // Same as: mappings mappings 
} 
+0

これを実行するとこのエラーが発生します。 – toy

+0

testing:panic:reflect:call of reflect.Value・ptrのフィールド値 – toy

+2

これは 'url'の代わりに' url'へのポインタを渡すためです。ポインタを渡すと主張するならば、 'v:= reflect.ValueOf(url).Elem()'で* line 2 *を変更してください。 –

関連する問題