为了账号安全,请及时绑定邮箱和手机立即绑定

在 Go 中遍历结构体的字段

在 Go 中遍历结构体的字段

Go
慕后森 2021-06-21 21:02:40
基本上,遍历 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).
查看完整描述

3 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

如果您想遍历结构的字段和值,则可以使用以下 Go 代码作为参考。


package main


import (

    "fmt"

    "reflect"

)


type Student struct {

    Fname  string

    Lname  string

    City   string

    Mobile int64

}


func main() {

    s := Student{"Chetan", "Kumar", "Bangalore", 7777777777}

    v := reflect.ValueOf(s)

    typeOfS := v.Type()


    for i := 0; i< v.NumField(); i++ {

        fmt.Printf("Field: %s\tValue: %v\n", typeOfS.Field(i).Name, v.Field(i).Interface())

    }

}


注意:如果您的结构中的字段未导出,v.Field(i).Interface()则会导致恐慌panic: reflect.Value.Interface: cannot return value obtained from unexported field or method.


查看完整回答
1 反对 回复 2021-06-28
  • 3 回答
  • 0 关注
  • 407 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信