go语言fmt.Printf格式化打印使用

示例如下

package main

import (
	"fmt"
	"time"
)

type User struct {
	ID    int
	Name  string
	Login time.Time
}

func main() {
	var a int = 10
	var c int = -10
	var b string = "bb"
	var st = User{ID: 1, Name: "jack"}

	// 通用占位符
	// %v	以默认的方式打印变量的值(万能占位符,如果不知道变量是什么类型,用%v即可,go语言会自动为你识别)
	// %T	打印变量的类型
	// %%	字面上的百分号,并非值的占位符
	fmt.Printf("%v\n", a)         // 10
	fmt.Printf("%T, %T\n", a, st) // int, main.User
	fmt.Printf("%d%%\n", a)       // 10%

	// 整数类型
	// %+d	带符号的整型
	// %q	打印单引号
	// %o	不带零的八进制
	// %#o	带零的八进制
	// %x	小写的十六进制
	// %X	大写的十六进制
	// %#x	带0x的十六进制
	// %b	打印整型的二进制
	// %U	打印Unicode字符
	// %#U	打印带字符的Unicode
	var d = 'Ω'
	var e = '\u03A9'
	fmt.Printf("%d, %+d, %o, %#o\n", a, c, a, a)
	fmt.Printf("%x, %#x, %b\n", a, a, a)
	fmt.Printf("%U, %#U | %U, %#U | %c,%c\n", d, d, e, e, d, e)
	// 10, -10, 12, 012
	// a, 0xa, 1010
	// U+03A9, U+03A9 'Ω' | U+03A9, U+03A9 'Ω' | Ω,Ω

	// 整数指定宽度
	// %5d	整型长度为5,右对齐,左边留白
	// %-5d	左对齐右边留白
	// %05d	数字前面补零
	a = 200
	fmt.Printf("|%d|\n", a)
	fmt.Printf("|%8d|\n", a)
	fmt.Printf("|%-8d|\n", a)
	fmt.Printf("|%08d|\n", a)
	// |200|
	// |     200|
	// |200     |
	// |00000200|

	// 浮点数
	var f = 3.141592653
	// %f	(=%.6f) 6位小数点
	// %.2f	最多2位小数来表示
	// %e	(=%.6e) 6位小数点(科学计数法)
	// %g	用最少的数字来表示
	// %.2g	最多2位数字来表示
	fmt.Printf("%f, %.2f, %e, %g, %.2g\n", f, f, f, f, f)
	// 3.141593, 3.14, 3.141593e+00, 3.141592653, 3.1

	// 字符串
	// %s	正常输出字符串
	// %q	字符串带双引号,字符串中的引号带转义符
	// %#q	字符串带反引号,如果字符串内有反引号,就用双引号代替
	// %x	将字符串转换为小写的16进制格式
	// %X	将字符串转换为大写的16进制格式
	// % x	带空格的16进制格式
	b = "这是字符串`\""
	fmt.Printf("%s\n", b) // 这是字符串`"
	fmt.Printf("%q\n", b) // "这是字符串`\""
	b = `这是"字符串\"`
	fmt.Printf("%s\n", b)  // 这是"字符串\"
	fmt.Printf("%q\n", b)  // "这是\"字符串\\\""
	fmt.Printf("%#q\n", b) // `这是"字符串\"`
	fmt.Printf("%x\n", b)  // e8bf99e698af22e5ad97e7aca6e4b8b25c22

	// 指定字符串长度
	// %5s	最小宽度为5
	// %-5s	最小宽度为5(左对齐)
	// %.5s	最大宽度为5
	// %5.7s	最小宽度为5,最大宽度为7
	// %-5.7s	最小宽度为5,最大宽度为7(左对齐)
	// %5.3s	如果宽度大于3,则截断
	// %05s	如果宽度小于5,就会在字符串前面补零
	b = "jack"
	fmt.Printf("|%5s|\n", b)     // | jack|
	fmt.Printf("|%-5s|\n", b)    // |jack |
	fmt.Printf("|%.5s|\n", b+b)  // |jackj|
	fmt.Printf("|%5.7s|\n", b+b) // |jackjac|
	fmt.Printf("|%5.3s|\n", b+b) // |  jac|
	fmt.Printf("|%05s|\n", b)    // |0jack|

	// 结构体
	// %v	以默认的方式打印变量的值
	// %+v	在打印结构体时,会添加字段名
	// %#v	在打印结构体时,会添加字段名和包名
	fmt.Printf("%v\n", st)
	fmt.Printf("%+v\n", st)
	fmt.Printf("%#v\n", st)
	// {1 jack 0001-01-01 00:00:00 +0000 UTC}
	// {ID:1 Name:jack Login:0001-01-01 00:00:00 +0000 UTC}
	// main.User{ID:1, Name:"jack", Login:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC)}

	// bool类型
	var b1 = true
	// %t	打印true或false
	fmt.Printf("%t %t, %v\n", b1, !b1, b1) // true false, true

	// 指针
	var b2 = &b1
	// %p	带0x的指针(指针值带有0x的十六进制前缀)
	// %#p	不带0x的指针
	fmt.Printf("%v, %p, %#p\n", b2, b2, b2) // 0xc000012168, 0xc000012168, c000012168
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值