我有一个struct
,其设计如下:
type UrlData struct {
As int
Iso string
}
我实例化它,然后读取一个文本文件(见下文),以便检查某些struct字段是否等于txt文件中的值(是的,我知道显式比较会容易得多,但是必须要从文件中读取数据)
txt文件具有以下格式:
as 646
iso us
在读取txt文件时,我想知道* UrlData.As字段(在实例化的项目中)是否等于文件中的值,即646。
问题是我不知道如何将txt文件中的当前字段与struct字段的名称匹配。最合适的方法是什么?
答案 0 :(得分:2)
您将需要实现一种机制,该机制可以确定行上命名的字段,并将其与结构中的相应字段进行匹配。字段标识很容易:在从文件中读取的行上使用strings.Split
,在空格上分割,然后检索第一个值。
在结构中查找它可以采取几种方法。最简单的方法是在条件或类似条件下对此进行显式测试(我避免显示代码来读取文件,因为问题的症结似乎是与struct值匹配):
// Struct
var myStruct *UrlData = // some instantiation
// Read line from file
line = // TODO
// Determine the field
parts := strings.Split(line, " ")
name, value := parts[0], parts[1]
// Look up the fields in the struct
switch name {
case "as":
return myStruct.As == value
case "iso":
return myStruct.Iso == value
}
也可以使用反射从文件名中动态查找结构字段,但这将更加复杂,应避免使用,直到您需要真正的通用解决方案为止(甚至最好避免-反射是不清楚的代码!)。