使用go-ini的mapTo函数映射嵌入结构体时的问题
go-ini嵌入结构体映射配置失效的解决方法
当使用包含嵌入结构体的TestData类型作为MapTo参数时,配置无法正常映射,变量data为空,但直接使用EmbeddedTestData可以正常运行。
解决方案
给TestData中的嵌入结构体字段添加ini:""标签,让go-ini库递归处理嵌入结构体的字段:
package main import ( "fmt" "github.com/go-ini/ini" "os" ) type TestData struct { EmbeddedTestData `ini:""` // 添加空ini标签,告知库解析嵌入字段 } type EmbeddedTestData struct { Port string WsPath string } func main() { inidata, err := ini.Load("config.ini") if err != nil { fmt.Printf("Fail to read file: %v", err) os.Exit(1) } data := new(TestData) err = inidata.Section("clientServer").MapTo(data) if err != nil { fmt.Printf("MapTo failed: %v", err) os.Exit(1) } fmt.Println("Content in variable 'data': ", data) }
原因说明
go-ini的MapTo方法默认不会自动解析匿名嵌入结构体的字段,通过给嵌入字段添加ini:""标签,显式告诉库需要递归处理该结构体的内容,这样配置段中的Port和WsPath就能正确映射到TestData的内嵌字段中。
内容的提问来源于stack exchange,提问作者Tompkins
相关产品推荐
相关产品推荐

