Go by Example: String Formatting Formatting strings


Go provides excellent support for traditional printf string formatting. Below are some examples of common string formatting tasks .

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

The next section covers: Text Templates

Guess you like

Origin blog.csdn.net/weixin_43547795/article/details/130876040