• Go学习笔记 -- fmt常用打印方法及占位符介绍


    普通打印

    Fprint
    接受一个输出流和多个写入值。
    拼接字符串并打印,如果前后两个操作值全都不是 string 类型的时候,自动添加空格分割。

    函数返回打印的字节数数量和错误信息。

    s := ""
    buf := bytes.NewBufferString(s)
    fmt.Fprint(buf, 1, 2, 3, "一共三个值\n")
    fmt.Print(buf)
    ---------------------------
    1 2 3一共三个值
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    Print
    和 Fprint 功能一致,只是默认使用了控制台(os.Stdout)输出。
    函数返回打印的字节数数量和错误信息。

    fmt.Print("First", "Second", "\n")
    ----------------------------
    FirstSecond
    
    • 1
    • 2
    • 3

    Sprint
    使用默认格式拼接字符串,并返回一个新的字符串,如果前后两个操作值全都不是 string 类型的时候,自动添加空格分割。
    函数返回新的字符串。

    newStr := fmt.Sprint("First", "Second", "\n")
    fmt.Print(newStr)
    ---------------------------
    FirstSecond
    
    • 1
    • 2
    • 3
    • 4

    Append
    接收一个字节切片以及多个字符串,并将字符串中的字符添加到切片中。
    函数返回一个字节切片。

    byteList := []byte{'h', 'e', 'a', 'd', 'e', 'r', ' '}
    new_bytes := fmt.Append(byteList, "First", "Second", "\n")
    fmt.Print(string(new_bytes))
    ---------------------------
    header FirstSecond
    
    • 1
    • 2
    • 3
    • 4
    • 5

    自带换行

    Fprintln
    接受一个输出流和多个写入值。拼接字符串并打印,操作值之间自动添加空格分割,结束后自动添加换行符
    函数返回打印的字节数数量和错误信息。

    fmt.Fprintln(os.Stdout, "First", "Second")
    -------------------
    First Second
    
    
    • 1
    • 2
    • 3
    • 4

    Println
    和 Fprintln 功能一样,默认使用控制台输出
    函数返回打印的字节数数量和错误信息。
    Sprintln
    使用默认格式拼接字符串,并返回一个新的字符串,操作值之间自动添加空格分割,结束后自动添加换行符。
    函数返回新的字符串。
    Appendln
    接收一个字节切片以及多个操作值,并将操作值中的字符添加到切片中,在添加下一个操作值的字符之前会先添加一个空格,结束后自动添加换行符。
    函数返回一个字节切片。

    格式化打印

    也是比较常用的打印方法,将操作值按照占位符代表的格式进行转换并替换。
    Fprintf
    根据占位符转换并通过指定输出流输出

    fmt.Fprintf(os.Stdout, "string:%s,number:%d", "test", 14)
    ---------------------
    string:test,number:14
    
    • 1
    • 2
    • 3

    Printf
    和 Fprintf 功能一样,默认使用控制台输出
    Sprintf
    根据占位符转换并将结果值返回
    Appendf
    接收一个字节切片、一个带有占位符的字符串、若干操作值,将操作值按照占位符格式转换后,将其字符添加到切片中。

    byteList := []byte{'h', 'e', 'a', 'd', 'e', 'r', ' '}
    new_bytes := fmt.Appendf(byteList, "number:%d,string:%s", 1, "test")
    fmt.Println(string(new_bytes))
    ------------------------
    header number:1,string:test
    
    • 1
    • 2
    • 3
    • 4
    • 5

    占位符

    普通占位符

    占位符作用
    %v使用默认格式显示
    %+v可以显示结构体字段名
    %#v可以显示结构体信息和字段名
    %T显示类型
    test := Test{"ttt"}
    fmt.Printf("value: %v\n", "First")
    fmt.Printf("value: %v\n", 200)
    fmt.Printf("value: %+v\n", test)
    fmt.Printf("value: %#v\n", test)
    fmt.Printf("type:%T", "First")
    ----------------------------
    value: First
    value: 200
    value: {name:ttt}
    value: main.Test{name:"ttt"}
    typestring
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    字符串占位符

    占位符作用
    %s替换字符串
    %10s,%-10s设置宽度为10(右对齐,左对齐)
    %010s设置宽度为10,右对齐,左侧补零
    %10.2s,%-10.2s设置宽度为10,并截取两位字符(右对齐,左对齐)
    %q自动加双引号
    fmt.Printf("str1: %s\n", "First")
    fmt.Printf("str1: %10s\n", "First")
    fmt.Printf("str1: %-10s\n", "First")
    fmt.Printf("str1: %010s\n", "First")
    fmt.Printf("str1: %10.2s\n", "First")
    fmt.Printf("str1: %-10.2s\n", "First")
    fmt.Printf("str1: %q\n", "First")
    -------------------------
    str1: First
    str1:      First
    str1: First     
    str1: 00000First
    str1:         Fi
    str1:Fi         
    str1: "First"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    整数占位符

    占位符作用
    %b显示二进制
    %o显示八进制
    %d显示十进制
    %x,%#x显示十六进制(小写),显示十六进制(小写且显示前缀)
    %X,%#X显示十六进制(大写),显示十六进制(大写且显示前缀)
    %U,%#U显示Unicode,显示Unicode并在后面显示被单引号包裹的字符
    %c显示Unicode键码
    fmt.Printf("BINARY: %b\n", 200)
    fmt.Printf("OCTAL: %o\n", 200)
    fmt.Printf("DECIMAL: %d\n", 200)
    fmt.Printf("HEX(lowercase): %x\n", 200)
    fmt.Printf("HEX(lowercase): %#x\n", 200)
    fmt.Printf("HEX(uppercase): %X\n", 200)
    fmt.Printf("HEX(uppercase): %#X\n", 200)
    fmt.Printf("UNICODE: %U\n", 100)
    fmt.Printf("UNICODE: %#U\n", 100)
    fmt.Printf("KEY CODE: %c\n", 0x0064)
    ---------------------
    BINARY: 11001000
    OCTAL: 310
    DECIMAL: 200
    HEX(lowercase): c8
    HEX(lowercase): 0xc8
    HEX(uppercase): C8
    HEX(uppercase): 0XC8
    UNICODE: U+0064
    UNICODE: U+0064 'd'
    KEY CODE: d
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    浮点数占位符

    占位符作用
    %e,%.5e使用科学计数法,后者小数点后保留5位
    %E,%.5E使用科学计数法,后者小数点后保留5位
    %f,%.2f显示浮点数默认保留小数点后了6位,后者保留两位
    %g,%.5g以%f,%e中较短的输出宽度自动适配,后者保留5位有效值(小数点后末尾的0不显示)
    %G,%.5G以%f,%E中较短的输出宽度自动适配,后者保留5位有效值(小数点后末尾的0不显示)
    fmt.Printf("科学计数e: %e\n", 2123000000.123456)
    fmt.Printf("科学计数e,小数点后保留5位: %.5e\n", 2123000000.123456)
    fmt.Printf("科学计数E: %E\n", 2123000000.123456)
    fmt.Printf("科学计数E,小数点后保留5位: %.5E\n", 2123000000.123456)
    fmt.Printf("浮点数: %f\n", 2123000000.12345678)
    fmt.Printf("小数点后保留两位: %.2f\n", 2000000000.123456)
    fmt.Printf("自动适配: %g\n", 200.123456)
    fmt.Printf("自动适配,保留有效值: %.5g\n", 200.123456)
    fmt.Printf("自动适配,保留有效值: %.5g\n", 200.103456)
    fmt.Printf("自动适配,保留有效值: %.5g\n", 2123000000.123456)
    fmt.Printf("自动适配,保留有效值: %.5G\n", 2123000000.123456)
    -----------------------------
    科学计数e: 2.123000e+09
    科学计数e,小数点后保留5: 2.12300e+09
    科学计数E: 2.123000E+09
    科学计数E,小数点后保留5: 2.12300E+09
    浮点数: 2123000000.123457
    小数点后保留两位: 2000000000.12
    自动适配: 200.123456
    自动适配,保留有效值: 200.12
    自动适配,保留有效值: 200.1
    自动适配,保留有效值: 2.123e+09
    自动适配,保留有效值: 2.123E+09
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    其他占位符

    占位符作用
    %p,%#p指针占位符,后者不显示前缀
    %t布尔占位符
    test := Test{"ttt"}
    fmt.Printf("POINTER: %p\n", &test)
    fmt.Printf("POINTER: %#p\n", &test)
    fmt.Printf("RESULT: %t\n", true)
    fmt.Printf("RESULT: %t\n", false)
    ----------------------
    POINTER: 0xc000062250
    POINTER: c000062250
    RESULT: true
    RESULT: false
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 相关阅读:
    仿游戏热血江湖游戏类31
    java中几种对象存储(文件存储)中间件的介绍
    网络编程实战(一)
    【C++初阶】STL详解(一)string类
    pnpm : 无法加载文件 C:\Users\lenovo\AppData\Roaming\npm\pnpm.ps1
    看漫画学Python
    Altium Designer 常见问题解答
    【C指针详解】进阶篇
    冒死上传,全网最齐全的建模软件都在这
    【RuoYi-Vue-Plus】学习笔记 39 - Redisson(十一)分布式锁 lock4j 集成分析(源码 + Lua 脚本)
  • 原文地址:https://blog.csdn.net/qq_40096897/article/details/128099988