我有一個.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.MapTo和Section.MapTo方法實現了此功能。

翻翻過去那場雪
TA貢獻2065條經驗 獲得超14個贊
雖然@MuffinTop 解決了您的緊迫問題,但我想說您可能正在解決一個錯誤的問題。我個人知道至少有兩個包github.com/Thomasdezeeuw/ini
和gopkg.in/gcfg.v1
,它們能夠解析 INI 風格的文件(不同級別的“INI-ness”,FWIW)并struct
使用反射自動填充您的-typed 值,所以對您來說它只是數量在結構的字段上正確設置標簽(如果需要的話)。
我在生產中使用了這兩個軟件包,因此能夠立即推薦它們。您可能會發現,致力于解析INI文件更多的包上godoc.org
。
- 2 回答
- 0 關注
- 236 瀏覽
添加回答
舉報
0/150
提交
取消