课程名称: Go开发工程师全新版
课程章节: 5-3 格式化输出
课程讲师: bobby
课程内容:
格式化: 字符串形式,以 % 符号开头
fmt.Printf(): fmt包中函数,可以格式化输出字符串,性能不好
fmt.Printf([格式化样式],[参数1],[参数2]...);
// 如
fmt.Printf("名称: %s,年龄: %d, 地址: %s \r\n", name, age, address)
fmt.Sprintf(): fmt包中函数,传入格式化样式字符串,会生成并返回字符串,Printf() 直接打印 没有返回
fmt.Sprintf([格式化样式],[参数1],[参数2]...);
// 如
// 有返回值,不会直接打印,需要接收
str := fmt.Sprintf("名称: %s,年龄: %d, 地址: %s \r\n", name, age, address)
fmt.Println(str)
演示
package main
import (
"fmt"
"strconv"
)
func main() {
// 格式化输出
username := "bobby"
age := 18
address := "北京"
mobile := "18900000000"
var ages []int = []int{1, 2, 3}
//没有格式化写法,及其难维护
fmt.Println("用户名:" + username + ", 年龄:" + strconv.Itoa(age) + ",地址:" + address + ",电话:" + mobile)
// Printf:格式化输出,但性能没上面好
fmt.Printf("用户名: %s, 年龄:%d, 地址:%s, 电话:%s \r\n", username, age, address, mobile)
// Sprintf():返回格式化的输出后的字符串
userMsg := fmt.Sprintf("用户名: %T, 年龄:%T, 地址:%s, 电话:%s \r\n", ages, age, address, mobile)
fmt.Println(userMsg)
}
缺省格式和类型
格式化后的效果 | 动词 | 描述 |
---|---|---|
[0 1] | %v |
缺省格式 |
[]int64{0, 1} | %#v |
go语法打印 |
[]int64 | %T |
类型打印 |
整型(缩进, 进制类型, 正负符号)
格式化后的效果 | 动词 | 描述 |
---|---|---|
15 | %d |
十进制 |
+15 | %+d |
必须显示正负符号 |
␣␣15 | %4d |
Pad空格(宽度为4,右对齐) |
15␣␣ | %-4d |
Pad空格 (宽度为4,左对齐) |
1111 | %b |
二进制 |
17 | %o |
八进制 |
f | %x |
16进制,小写 |
字符(有引号, Unicode)
Value: 65
(Unicode letter A)
格式化后的效果 | 动词 | 描述 |
---|---|---|
A | %c |
字符 |
‘A’ | %q |
有引号的字符 |
U+0041 | %U |
Unicode |
U+0041 ‘A’ | %#U |
Unicode 有引号 |
浮点(缩进, 精度, 科学计数)
Value: 123.456
格式化后的效果 | 动词 | 描述 |
---|---|---|
1.234560e+02 | %e |
科学计数 |
123.456000 | %f |
十进制小数 |
字符串or 字节slice (引号, 缩进, 16进制)
Value: "cafe"
格式化后的效果 | 动词 | 描述 |
---|---|---|
cafe | %s |
字符串原样输出 |
␣␣cafe | %6s |
宽度为6,右对齐 |
课程收获:
对格式化输出有了清晰了认知