在 Go 中遍历结构体的字段

基本上,遍历 a 字段值的唯一方法(据我所知)struct是这样的:


type Example struct {

    a_number uint32

    a_string string

}


//...


r := &Example{(2 << 31) - 1, "...."}:

for _, d:= range []interface{}{ r.a_number, r.a_string, } {

  //do something with the d

}

我想知道,是否有更好、更通用的实现方式[]interface{}{ r.a_number, r.a_string, },所以我不需要单独列出每个参数,或者,是否有更好的方法来循环遍历结构?


我试图翻阅reflect包裹,但我撞到了墙,因为我不知道取回reflect.ValueOf(*r).Field(0).


慕后森
浏览 408回答 3
3回答

GCT1015

如果您想遍历结构的字段和值,则可以使用以下 Go 代码作为参考。package mainimport (&nbsp; &nbsp; "fmt"&nbsp; &nbsp; "reflect")type Student struct {&nbsp; &nbsp; Fname&nbsp; string&nbsp; &nbsp; Lname&nbsp; string&nbsp; &nbsp; City&nbsp; &nbsp;string&nbsp; &nbsp; Mobile int64}func main() {&nbsp; &nbsp; s := Student{"Chetan", "Kumar", "Bangalore", 7777777777}&nbsp; &nbsp; v := reflect.ValueOf(s)&nbsp; &nbsp; typeOfS := v.Type()&nbsp; &nbsp; for i := 0; i< v.NumField(); i++ {&nbsp; &nbsp; &nbsp; &nbsp; fmt.Printf("Field: %s\tValue: %v\n", typeOfS.Field(i).Name, v.Field(i).Interface())&nbsp; &nbsp; }}注意:如果您的结构中的字段未导出,v.Field(i).Interface()则会导致恐慌panic: reflect.Value.Interface: cannot return value obtained from unexported field or method.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go