如何从文件填充结构

时间:2018-09-18 21:31:37

标签: go

我有一个struct,其设计如下:

type UrlData struct {
    As int 
    Iso string 
}

我实例化它,然后读取一个文本文件(见下文),以便检查某些struct字段是否等于txt文件中的值(是的,我知道显式比较会容易得多,但是必须要从文件中读取数据)

txt文件具有以下格式:

as 646
iso us

在读取txt文件时,我想知道* UrlData.As字段(在实例化的项目中)是否等于文件中的值,即646。

问题是我不知道如何将txt文件中的当前字段与struct字段的名称匹配。最合适的方法是什么?

1 个答案:

答案 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
}

也可以使用反射从文件名中动态查找结构字段,但这将更加复杂,应避免使用,直到您需要真正的通用解决方案为止(甚至最好避免-反射是不清楚的代码!)。