46-string-formating

//  Go在printf中对字符串的格式化输出的支持非常好。

package main

import (
	"fmt"
	"os"
)

type point struct {
	x, y int
}

func main() {
	p := point{1, 2}

	// Go提供多种打印动词来格式化一般的Go值
	fmt.Printf("%v\n", p)    // 打印point结构体
	fmt.Printf("%+v\n", p)   // 如果打印的值是结构体,%+v将会输出结构体的字段名
	fmt.Printf("%#v\n", p)   // %#v将会输出一段Go语法来表示该值,例如生成该值的源代码片段
	fmt.Printf("%T\n", p)    // 打印值的类型
	fmt.Printf("%t\n", true) // 格式化布尔值
	fmt.Printf("%d\n", 123)  // 有多种格式化输出整数的方式,%d是标准的十进制格式化输出
	fmt.Printf("%b\n", 14)   // 输出二进制形式
	fmt.Printf("%c\n", 33)   // 输出与给定整数对应的字符
	fmt.Printf("%x\n", 456)  // 输出十六进制编码
	fmt.Printf("%f\n", 78.9) //有多种格式化输出浮点数的方式,%f是标准的十进制格式化输出

	// 以科学计数法的形式输出浮点数,%e和%E略有不同
	fmt.Printf("%e\n", 123400000.0)
	fmt.Printf("%E\n", 123400000.0)

	fmt.Printf("%s\n", "\"string\"") // 输出字符串使用%s
	fmt.Printf("%q\n", "\"string\"") // 像源码一样双引号引其字符串使用%q
	fmt.Printf("%x\n", "hex this")   // 像整数一样,以十六进制形式输出字符串,每个输入字节有两个输出字符
	fmt.Printf("%p\n", &p)           // %p用于输出指针

	// 格式化数字时,通常需要控制结果图的宽度和精度
	// 要指定整数的宽度,在%后加上数字
	// 默认情况下,结果右对齐,并使用空格填充
	fmt.Printf("|%6d|%6d|\n", 12, 345)
	fmt.Printf("|%6.2f|%6.2f|\n", 1.2, 3.45)   // 指定浮点数宽度的同时限定小数点的精度
	fmt.Printf("|%-6.2f|%-6.2f|\n", 1.2, 3.45) // 使用 - 符号实现左对齐

	// 输出字符串时控制宽度,默认为右对齐
	fmt.Printf("|%6s|%6s|\n", "foo", "b")
	fmt.Printf("|%-6s|%-6s|\n", "foo", "b")

	// 以上都是Printf将格式化的内容输出到os.Stdout

	// Sprintf格式化并返回一个字符串而不在任何地方输出它
	s := fmt.Sprintf("a %s", "string")
	fmt.Println(s)

	// 使用Fprintf格式化并打印到os.Stdout以外的io.Writers
	fmt.Fprintf(os.Stderr, "an %s\n", "error")

}
上次修改: 10 January 2020