英文源地址
Go为传统的printf字符串格式化提供了出色的支持. 下面是一些常见的字符串格式化任务的示例.
package main
import (
"fmt"
"os"
)
type Point struct {
x, y int
}
func main() {
// Go提供了几个printing的动词, 用于格式化通用的Go的值.
// 比如, 这里打印了point结构体的实例
p := Point{
1, 2}
fmt.Printf("struct1: %v\n", p)
// 如果该值是一个结构体. 则%+v变体将包含该结构体的字段名
fmt.Printf("struct2: %+v\n", p)
// %#v变量打印该值的Go语法表示形式, 即产生该值的源代码片段
fmt.Printf("struct3: %#v\n", p)
// 要打印值的类型, 请使用%T
fmt.Printf("type: %T\n", p)
// 格式化布尔值很简单
fmt.Printf("bool: %t\n", true)
// 格式化整数有很多选项.使用%d进行标准的以10为基数的格式化
fmt.Printf("int: %d\n", 123)
// 这将打印一个二进制表示
fmt.Printf("bin: %b\n", 14)
// 输出与给定整数对应的字符
fmt.Printf("char: %c\n", 33)
// %x提供16进制编码
fmt.Printf("hex: %x\n", 456)
// 浮点数也有多种格式化选项.对于基本的十进制格式, 使用%f
fmt.Printf("float1: %f\n", 78.9)
// %e和%E用科学计数法格式化(略有不同的版本)浮点数
fmt.Printf("float2: %e\n", 123400000.0)
fmt.Printf("float3: %E\n", 123400000.0)
// 对于基本的字符串打印, 使用%s
fmt.Printf("str1: %s\n", "\"string\"")
// 要像Go源代码中那样双引号字符串, 请使用%q
fmt.Printf("str2: %q\n", "\"string\"")
// 与前面看到的整数一样, %x以16进制呈现字符串, 每个输入字节有两个输出字符
fmt.Printf("str3: %x\n", "hex this")
// 要打印指针的表示形式, 请使用%p
fmt.Printf("pointer: %p\n", &p)
// 在格式化数字时, 通常需要控制生成图形的宽度和精度
// 若要指定整数的宽度, 在动词中的%后面使用数字.
// 默认情况下,结果将被右对齐并填充空格
fmt.Printf("width1: |%6d|%6d|\n", 12, 345)
// 你还可以指定打印浮点数的宽度, 尽管通常你还需要在宽度的同时限制小数精度使用width.precision语法
fmt.Printf("width2: |%6.2f|%6.2f|\n", 1.2, 3.45)
// 要左对齐, 请使用-标志位
fmt.Printf("width3: |%-6.2f|%-6.2f|\n", 1.2, 3.45)
// 在格式化字符串时, 你可能需要控制宽度, 特比是要确保它们在类似表格的输出中对齐
// 用于基本你的右对齐宽度
fmt.Printf("width4: |%6s|%6s|\n", "foo", "b")
// 要左对齐, 使用-标志, 就像数字一样
fmt.Printf("width5: |%-6s|%-6s|\n", "foo", "b")
// 到目前为止, 我们以及看了Printf, 它将格式化字符串打印到os.Stdout.
// Sprintf格式化并返回一个字符串, 而不打印到任何地方
s := fmt.Sprintf("sprintf: a %s", "string")
fmt.Println(s)
// 你可以格式化+打印到io.Writers而不是os.Stdout,通过使用Fprintf
fmt.Fprintf(os.Stderr, "io: an %s\n", "error")
}
$ go run string-formatting.go
struct1: {1 2}
struct2: {x:1 y:2}
struct3: main.point{x:1, y:2}
type: main.point
bool: true
int: 123
bin: 1110
char: !
hex: 1c8
float1: 78.900000
float2: 1.234000e+08
float3: 1.234000E+08
str1: "string"
str2: "\"string\""
str3: 6865782074686973
pointer: 0xc0000ba000
width1: | 12| 345|
width2: | 1.20| 3.45|
width3: |1.20 |3.45 |
width4: | foo| b|
width5: |foo |b |
sprintf: a string
io: an error
下一节将介绍: Text Templates