【发布时间】:2017-04-16 13:21:54
【问题描述】:
我正在编写一个简单的程序,它接收来自表单的输入,用接收到的数据填充结构的实例,并将接收到的数据写入文件。
我现在有点卡住了,想找出迭代填充结构并将其内容写入文件的最佳方法。
有问题的结构包含 3 种不同类型的字段(整数、字符串、[] 字符串)。
我可以遍历它们,但我无法获得它们的实际类型。
用 print 语句检查我在下面发布的代码会发现它们的每种类型都作为结构返回,而不是前面提到的字符串、int 等。
所需的输出格式是纯文本。
例如:
field_1="value_1"
field_2=10
field_3=["a", "b", "c"]
有人有什么想法吗?也许我完全走错了路?
func (c *Config) writeConfigToFile(file *os.File) {
listVal := reflect.ValueOf(c)
element := listVal.Elem()
for i := 0; i < element.NumField(); i++ {
field := element.Field(i)
myType := reflect.TypeOf(field)
if myType.Kind() == reflect.Int {
file.Write(field.Bytes())
} else {
file.WriteString(field.String())
}
}
}
【问题讨论】:
-
reflect.Value.Bytes不会返回您认为返回的内容。见这里golang.org/pkg/reflect/#Value.Bytes -
您希望生成的文件是什么格式? JSON、XML 还是纯文本?如果是纯文本,您希望如何格式化数据?一切都在一条线上?还是每个字段一行?以及如何格式化切片?
-
只是为了扩展我的第一条评论,如果您的字段是
int类型,在其reflect.Value上调用Bytes会恐慌,因为Bytes方法仅适用于类型为[]byte。这是一个例子play.golang.org/p/g4UWNhbbzM -
@mkopriva 格式将是纯文本 - 我已编辑问题以包含更多详细信息。