使用golang根据位置解析字符串的好方法是什么?

Vip*_*old 2 string parsing go

我正在设计一个简单的应用程序,使用go来读取代表客户文件格式的几种文件格式.我的第一个想法是读取每个文件行,然后将其解析为结构.到目前为止这么好,但我需要根据它的索引拆分每个字段.例如:

line := "1003450020170804890000000022344"
Run Code Online (Sandbox Code Playgroud)

Id从位置1开始到位置4 = 1003 CustomerId是位置5到7以及与该结构相关的所有其他字段.

我想知道是否有更高效的读取格式并应用于此文件行,我想为每个字段创建一些结构并具有开始和结束字段,但这对我来说听起来很奇怪.

type Record struct {
Id       int
Date     time.Time
Value    float64
ClientId int32
}

type RecordId struct {
  Start  int
  Finish int
  Value  int
}

type ClientId struct {
  Start  int
  Finish int
  Value  int32
}
Run Code Online (Sandbox Code Playgroud)

我不知道我是否在路上,也许有更优雅的东西在这种情况下会更好.

ako*_*ond 5

var a, b int
n, err := fmt.Sscanf("1003450020170804890000000022344", "%4d%3d", &a, &b)
if err != nil {
   // ...
}

fmt.Println(a) // 1003
fmt.Println(b) // 450
Run Code Online (Sandbox Code Playgroud)

然后你可以用这些创建一个结构.