如何在Golang中创建固定长度的文本文件?

Kir*_*ril 2 text go

我需要根据数据库中的数据创建固定长度的文本文件。数据导出没有问题,将数据加载到Go中也可以。如何以固定长度样式打印数据?

我有以下结构

type D struct {
  A10 string // Should be 10 characters in result file
  A20 string // Should be 20 characters in result file
  A50 string // Should be 50 characters in result file
}

var d := D{ "ten", "twenty", "fifty" }
Run Code Online (Sandbox Code Playgroud)

所以,打印结构的结果应该是

|       ten|              twenty|                                   fifty|
Run Code Online (Sandbox Code Playgroud)

我已经弄清楚,这fmt.Printf("%10s", "ten")将在前面添加 10 个前导空格,但我不知道如何阻止它溢出:fmt.Printf("%10s", "tenaaaaaaaa")将打印 11 个字符。

我想到了一个遍历每个字段并剪掉太长字符串的函数:

func trimTooLong(d *D) {
  d.A10 = d.A10[:10]
  d.A20 = d.A20[:20]
  d.A50 = d.A20[:50]
}
Run Code Online (Sandbox Code Playgroud)

会有更好的方法吗?

Pau*_*kin 7

您可以使用字符串格式中的精度将输出截断为字段宽度。

fmt.Printf("%5.5s", "Hello, world")
fmt.Printf("%5.5s", "A")
Run Code Online (Sandbox Code Playgroud)

将输出"Hello A".

所以在你的例子中,这可以解决问题:

fmt.Printf("%10.10s%20.20s%50.50s", d.A10, d.A20, d.A50)
Run Code Online (Sandbox Code Playgroud)

  • 这是迄今为止最合适的方法,因为我也可以像 `fmt.Printf("%05.5", "12")` 一样填充“0” (2认同)