亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用反射初始化結構值字段?

如何使用反射初始化結構值字段?

Go
慕娘9325324 2021-12-07 17:05:09
我有一個.ini配置文件,我想用它來初始化一個Configuration結構。我想使用Configuration字段名稱并遍歷它們以使用 .ini 文件中的相應值填充我的新實例。我認為實現這一目標的最佳方法可能是反射 API(也許我完全錯了,告訴我......)我的問題是我無法弄清楚如何訪問字段的名稱(如果至少可能的話)這是我的代碼:package testimport(     "reflect"     "gopkg.in/ini.v1" )type Config struct {    certPath string    keyPath  string    caPath   string}func InitConfig(iniConf *ini.File) *Config{    config:=new(Config)    var valuePtr reflect.Value = reflect.ValueOf(config)    var value reflect.Value = valuePtr.Elem()    for i := 0; i < value.NumField(); i++ {        field := value.Field(i)        if field.Type() == reflect.TypeOf("") {            //here is my problem, I can't get the field name, this method does not exist... :'(            value:=cfg.GetSection("section").GetKey(field.GetName())            field.SetString(value)        }    }    return config}任何幫助表示贊賞...
查看完整描述

2 回答

?
溫溫醬

TA貢獻1752條經驗 獲得超4個贊

使用類型,以獲得StructField。StructField 的名稱為

 name := value.Type().Field(i).Name

請注意,ini 包的File.MapToSection.MapTo方法實現了此功能。


查看完整回答
反對 回復 2021-12-07
?
翻翻過去那場雪

TA貢獻2065條經驗 獲得超14個贊

雖然@MuffinTop 解決了您的緊迫問題,但我想說您可能正在解決一個錯誤的問題。我個人知道至少有兩個包github.com/Thomasdezeeuw/inigopkg.in/gcfg.v1,它們能夠解析 INI 風格的文件(不同級別的“INI-ness”,FWIW)并struct使用反射自動填充您的-typed 值,所以對您來說它只是數量在結構的字段上正確設置標簽(如果需要的話)。

我在生產中使用了這兩個軟件包,因此能夠立即推薦它們。您可能會發現,致力于解析INI文件更多的包godoc.org。


查看完整回答
反對 回復 2021-12-07
  • 2 回答
  • 0 關注
  • 236 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號