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

如何动态获取结构中的字段

如何动态获取结构中的字段

Go
炎炎设计 2021-11-22 19:25:44
我有以下结构。我有方法 csv 它将返回用逗号分隔值连接字符串中的字段。package mainimport (    "bytes"    "strconv")type Event struct {    B_id string    B_nam string    B_typ int    B_uuid string    B_mj_id int    B_mi_id int    B_uid string    B_url string    B_mac string    E_typ string    E_time string    C_id string    D_os string    D_os_v string    D_nam string    D_v string    Br_nam string    Br_v string    A_pkg string    A_id string    M_u_id string    bn_id string}func (e *Event) Csv() string {    var buffer bytes.Buffer    var comma string = ","    buffer.WriteString(e.B_id)    buffer.WriteString(comma)    buffer.WriteString(e.B_nam)    buffer.WriteString(comma)    buffer.WriteString(strconv.Itoa(e.B_typ))    buffer.WriteString(comma)    buffer.WriteString(e.B_uuid)    buffer.WriteString(comma)    buffer.WriteString(strconv.Itoa(e.B_mj_id))    buffer.WriteString(comma)    buffer.WriteString(strconv.Itoa(e.B_mi_id))    buffer.WriteString(comma)    buffer.WriteString(e.B_uid)    buffer.WriteString(comma)    buffer.WriteString(e.B_url)    buffer.WriteString(comma)    buffer.WriteString(e.B_mac)    buffer.WriteString(comma)    buffer.WriteString(e.E_typ)    buffer.WriteString(comma)    buffer.WriteString(e.E_time)    buffer.WriteString(comma)    buffer.WriteString(e.C_id)    buffer.WriteString(comma)    buffer.WriteString(e.D_os)    buffer.WriteString(comma)    buffer.WriteString(e.D_os_v)    buffer.WriteString(comma)    buffer.WriteString(e.D_nam)    buffer.WriteString(comma)    buffer.WriteString(e.D_v)    buffer.WriteString(comma)    buffer.WriteString(e.Br_nam)    buffer.WriteString(comma)    buffer.WriteString(e.Br_v)    buffer.WriteString(comma)    buffer.WriteString(e.A_pkg)    buffer.WriteString(comma)    buffer.WriteString(e.A_id)    buffer.WriteString(comma)    buffer.WriteString(e.M_u_id)    buffer.WriteString(comma)    buffer.WriteString(e.bn_id)    return buffer.String()}在这里您可以看到我将每个字段添加到缓冲区中并将其作为字符串返回。这段代码看起来不太好。
查看完整描述

1 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

使用reflect来迭代结构字段。


这是示例:


package main


import (

    "fmt"

    "reflect"

    "strings"

)


type Event struct {

    B_id    string

    B_nam   string

    B_typ   string

    B_uuid  string

    B_mj_id string

    B_mi_id string

    B_uid   string

    B_url   string

    B_mac   string

    E_typ   string

    E_time  string

    C_id    string

    D_os    string

    D_os_v  string

    D_nam   string

    D_v     string

    Br_nam  string

    Br_v    string

    A_pkg   string

    A_id    string

    M_u_id  string

    // bn_id   string  //FIXME: unexported fields not work for reflection?

}


func main() {

    // initialize your struct, I only take a few of fields as example.

    e := Event{A_id: "hah", M_u_id: "dadas"}

    v := reflect.ValueOf(e)


    values := make([]string, v.NumField())

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

        values[i] = v.Field(i).String()

    }


    fmt.Println(strings.Join(values, ","))

}

可能这会有所帮助。


你可以在线运行:http : //play.golang.org/p/ZheOnMFRnI


查看完整回答
反对 回复 2021-11-22
  • 1 回答
  • 0 关注
  • 150 浏览
慕课专栏
更多

添加回答

举报

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