我有一个.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条经验 获得超13个赞
虽然@MuffinTop 解决了您的紧迫问题,但我想说您可能正在解决一个错误的问题。我个人知道至少有两个包github.com/Thomasdezeeuw/ini
和gopkg.in/gcfg.v1
,它们能够解析 INI 风格的文件(不同级别的“INI-ness”,FWIW)并struct
使用反射自动填充您的-typed 值,所以对您来说它只是数量在结构的字段上正确设置标签(如果需要的话)。
我在生产中使用了这两个软件包,因此能够立即推荐它们。您可能会发现,致力于解析INI文件更多的包上godoc.org
。
- 2 回答
- 0 关注
- 190 浏览
添加回答
举报
0/150
提交
取消