我正在编写一个简单的程序,它从表单中获取输入,用接收到的数据填充结构的实例,并将接收到的数据写入文件 .
我现在有点陷入困境,想出了迭代填充结构并将其内容写入文件的最佳方法 .
有问题的结构包含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())
}
}
}
2 回答
您可以使用
strconv
包或fmt
来格式化字段,而不是使用reflect.Value
上的Bytes
方法,它不能按照您的预期工作 .这是使用
fmt
的示例:游乐场:https://play.golang.org/p/KQF3CicVzA
为什么不使用built-in gob package存储结构值?
我用它来存储不同的结构,每行一个,在文件中 . 在解码过程中,您可以测试类型转换或在包装器中提供提示 - 以您的给定用例更快的速度为准 .
在读取行时,您可以在编码和解码时将每一行视为缓冲区 . 您甚至可以实时gzip / zlib / compress,加密/解密等流 .
当您拥有抛光和装甲轮时,没有必要重新发明轮子 .