2013-08-27 57 views
1

如何获取具有字段名称的字段的基础值作为字符串?Golang:以字符串形式获取字段名称的底层结构

我知道我需要使用反射,但如果我这样做,我将不得不继续在我的代码中使用它?有什么办法可以断言吗?

我只想获得该字段的值,底层结构,在这种情况下是[]骰子。

http://play.golang.org/p/KYOH8C7TAl

type Dice struct { 
    In int 
} 

type SliceNDice struct { 
    Unknown []Dice 
} 

func main() { 
    structure := SliceNDice{make([]Dice, 10)} 

    refValue := reflect.ValueOf(&structure).Elem().FieldByName(string("Unknown")) 
    slice := refValue.Slice(0, refValue.Len()) 

    // cannot range over slice (type reflect.Value) 
    //for i,v := range slice { 
    // fmt.Printf("%v %v\n", i, v.In) 
    //} 

    for i := 0; i < slice.Len(); i++ { 
     v := slice.Index(i) 
     // v.In undefined (type reflect.Value has no field or method In) 
     fmt.Printf("%v %v\n", i, v.In) 
    } 

} 

回答

1

如果您知道“未知”字段类型[]骰子,你可以使用Value.Interface来获取潜在价值,并与一类断言其转换:

slice := refValue.Interface().([]Dice) 

for i,v := range slice { 
    fmt.Printf("%v %v\n", i, v.In) 
} 

http://play.golang.org/p/2lV106b6dH

+0

愚蠢的细节:s/reflect.Interface/Value.Interface /;前者存在,但是是别的。 –

相关问题