本文所涉及代码路径: https://gitee.com/rockywish/go/blob/master/01day_datatype/placeholder.go
一、普通占位符
/*
占位符
*/
func main() {
//声明变量my_car
my_car := Cars{Brand: "BWM"}
/*
普通占位符
*/
//%v 相应值的默认格式
// \n为换行符
//输出 my_car的值为 {BWM}
fmt.Printf("my_car的值为 %v \n", my_car)
//%+v 打印结构体 会添加字段名
//{Brand:BWM}
fmt.Printf("%+v \n", my_car)
//定义变量rockywish_age
var rockywish_age = 18
//%T 相应值的类型
//输出 rockywish_age的类型为 int
fmt.Printf("rockywish_age的类型为 %T\n", rockywish_age)
//字面上的百分号,并非值的占位符
//输出 %
fmt.Printf("%% \n")
}
/*
为了更好的演示占位符,定义一个结构体,后续会专门讲解结构体
*/
type Cars struct {
Brand string
}
二、布尔占位符
/*
布尔占位符
*/
// %t true 或 false。
//输出true、false
fmt.Printf("%t\n", true)
fmt.Printf("%t\n", false)
三、整数占位符
/*
整数占位符
*/
var rockywish_id = 100
//%b 以二进制表示
//输出 1100100
fmt.Printf("%b \n", rockywish_id)
//%d 十进制表示
//输出 100
fmt.Printf("%d \n", rockywish_id)
//%o 八进制表示
//输出 144
fmt.Printf("%o \n", rockywish_id)
var rockywish_num = 15
//%x 十六进制表示 字母形式为小写 a-f
//输出 f
fmt.Printf("%x \n", rockywish_num)
//%X 十六进制表示 字母形式为大写 A-F
//输出 F
fmt.Printf("%X \n", rockywish_num)
//Unicode码点所表示的字符
//输出 %!c(string=中国)
fmt.Printf("%c \n", "\u4e2d\u56fd")
//单引号围绕的字符,由Go语法安全地转义
//输出 '中'
fmt.Printf("%q \n", 0x4E2D)
四、浮点数和复数
/*
浮点数和复数的组成
*/
var rockywish_price = 20.9
//科学计数法
//2.090000e+01
fmt.Printf("%e \n", rockywish_price)
//科学计数法
//2.090000E+01
fmt.Printf("%E \n", rockywish_price)
//有小数点而无指数
//20.900000
fmt.Printf("%f \n", rockywish_price)
//%g 根据情况选择 %e 或 %f 以产生更紧凑的(无末尾的0)
//输出 20.9
fmt.Printf("%g \n", rockywish_price)
//%G 根据情况选择 %E 或 %f 以产生更紧凑的(无末尾的0)
// 输出(20.9+5i)
fmt.Printf("%G \n", 20.9+5i)
五、字符串和切片
/*
字符串和切片
*/
//%s 输出字符串
//输出 rockywish
var rockywish_name = "rockywish"
fmt.Printf("%s \n", rockywish_name)
//%q 双引号围绕的字符串,由Go语法安全地转义
//输出 "rockywish"
fmt.Printf("%q \n", rockywish_name)
//%x 十六进制,小写字母,每字节两个字符
//输出 726f636b7977697368
fmt.Printf("%x \n", rockywish_name)
//%X 十六进制,大写字母,每字节两个字符
//输出 726F636B7977697368
fmt.Printf("%X \n", rockywish_name)
六、指针
/*
指针
*/
//%p 十六进制表示,前缀 0x
//输出 0xc000010220
fmt.Printf("%p \n", &rockywish_name)
七、符号与精度
/*
符号与精度
无符号:golang没有 ‘%u’ 占位符,若整数为无符号类型,默认就会被打印成无符号的
宽度与精度:控制格式以Unicode码点为单位。宽度为该数值占用区域的最小宽度;精度为小数点之后的位数。操作数的类型为int时,宽度与精度都可用字符 ‘*’ 表示。
对于 %g/%G 而言,精度为所有数字的总数,%e 和 %f 的默认精度为6,对大多数的数值类型而言,宽度为输出的最小字符数,如果必要的话会为已格式化的形式填充空格,而以字符串类型,精度为输出的最大字符数,如果必要的话会直接截断
*/
var rockywish_score = 123.626789
//123.3
fmt.Printf("%.4g \n", rockywish_score)
//123.63
fmt.Printf("%6.2f \n", rockywish_score)
八、其他
/*
其他
*/
//+ 总打印数值的正负号,对于%q(%+q)保证只输出ASCII编码的字符
//输出 +10
fmt.Printf("%+d \n", 0xA)
//输出 "\u4e2d\u56fd"
var china = "中国"
fmt.Printf("%+q \n", china)