我有一个包含多种类型数据记录的文件,我需要将其解析为结构。
我很高兴了解一种按记录类型填充结构的惯用方法(如果存在)。类似于 python 的namedtuple(*fields)
构造函数。
package main
import (
"fmt"
"strconv"
"strings"
)
type X interface{}
type HDR struct {
typer, a string
b int
}
type BDY struct {
typer, c string
d int
e string
}
var lines string = `HDR~two~5
BDY~four~6~five`
func sn(s string) int {
i, _ := strconv.Atoi(s)
return i
}
func main() {
sl := strings.Split(lines, "\n")
for _, l := range sl {
fields := strings.Split(l, "~")
var r X
switch fields[0] {
case "HDR":
r = HDR{fields[0], fields[1], sn(fields[2])} // 1
case "BDY":
r = BDY{fields[0], fields[1], sn(fields[2]), fields[3]} // 2
}
fmt.Printf("%T : %v\n", r, r)
}
}
我特别感兴趣的是了解是否标记了行// 1并// 2可以方便地用代码替换,也许是某种允许结构本身处理类型转换的通用解码器。
斯蒂芬大帝
相关分类