Go 包 fmt 打印输出

1. 格式化输出函数

func Print(a ...interface{}) (n int, err error)

Print采用默认格式将其参数格式化并写入标准输出。如果两个相邻的参数都不是字符串,会在它们的输出之间添加空格,返回写入的字节数和遇到的任何错误。

func Printf(format string, a ...interface{}) (n int, err error)

Printf根据format参数生成格式化的字符串并写入标准输出,返回写入的字节数和遇到的任何错误。

func Println(a ...interface{}) (n int, err error)

Println采用默认格式将其参数格式化并写入标准输出。总是会在相邻参数的输出之间添加空格并在输出结束后添加换行符,返回写入的字节数和遇到的任何错误。 区别:

  • Println :可以打印出字符串,和变量
  • Printf : 只可以打印出格式化的字符串,可以输出字符串类型的变量,不可以输出整形变量和整形

1.1 通用

%v    相应值的默认格式    Printf("%v",person )    {zhangsan}
%+v    类似%v,但输出结构体时会添加字段名式    Printf("%+v",person )    {Name:zhangsan}
%#v    相应值的Go语法表示    Printf("#v",person )    main.Person={zhangsan}
%T    相应值的类型的Go语法表示    Printf("%T",person )    main.Person
%%    字面上的百分号,并非值的占位符    Printf("%%")    %

1.2 布尔值

%t    单词true或false    Printf("%t",true)    true

1.3 整数

%b    二进制表示    Printf("%b",5)    101
%c    该值对应的unicode码值    Printf("%c",0x4E2d)    中
%d    十进制表示    Printf("%d",0x12)    18
%o    八进制表示    Printf("%o",10)    12
%q    单引号围绕的字符字面值,由Go语法安全的转译    Printf("%q",0x4E2d)    '中'
%x    十六进制表示,字母形式为小写a-f    Printf("%x",13)    d
%X    十六进制表示,字母形式为大写A-F    Printf("%X",13)    D
%U    表示为Unicode格式:U+1234,等价于"U+%04X"    Printf("%U",0x4E2d)    U+4E2D

1.4 浮点数与复数的两个组分

%b    无小数部分、指数为二的幂的科学计数法,与strconv.FormatFloat的'b'转换格式一致。    Printf("%b",10.20)    5742089524897382p-49
%e    科学计数法,如-1234.456e+78    Printf("%e",10.20)    1.020000e+01
%E    科学计数法,如-1234.456E+78    Printf("%E",10.20)    1.020000E+01
%f    有小数部分但无指数部分,如123.456    Printf("%f",10.20)    10.200000
%g    根据实际情况采用%e或%f格式(以获得更简洁、准确的输出)    Printf("%g",10.20)    10.2
%G    根据实际情况采用%E或%F格式(以获得更简洁、准确的输出)    Printf("%G",10.20)    (10.2+2i)

1.5 字符串和 []byte

%s  输出字符串表示(string类型或[]byte)  Printf("%s",[]byte("Go语言"))  Go语言
%q  双引号围绕的字符串,由Go语法安全的转译  Printf("%q","Go语言")  "Go语言"
%x  十六进制,小写字母,每字节两个字符  Printf("%x","golang")  676f6c616e67
%X  十六进制,大写字母,每字节两个字符  Printf("%X","golang")  676F6C616E67

1.6 指针

%P    十六进制表示,前缀 0x    Printf("%p",&person)    0xc0420341c0

1.7 其他

+    总是输出数值的正负号;对%q(%+q)会生成全部是ASCII字符的输出(通过转义)    Printf("%+q","中文")    "\u4e2d\u6587"
-    在输出右边填充空白而不是默认的左边(即从默认的右对齐切换为左对齐);        
#    切换格式:八进制数前加0(%#o)    Printf("%#0",46)    
     十六进制数前加0x(%#x)或0X(%#X)    Printf("%#x",46)    0x2e
     指针去掉前面的0x(%#p);)    fmt.Printf("%#p",&person)    c0420441b0
     对%q(%#q),如果strconv.CanBackquote返回真会输出反引号括起来的未转义字符串;    Printf("%#q",'中')    '中'
     对%U(%#U),如果字符是可打印的,会在输出Unicode格式、空格、单引号括起来的go字面值;    Printf("%#U",'中')    U+4E2D '中'
' '    (空格)为数值中省略的正负号流出空白(% d);    Printf("% d",16)     16
     以十六进制(% x,% X)打印字符串或切片时,在字节之间用空格隔开    Printf("% x","abc")    61 62 63
0    使用0而不是空格填充,对于数值类型会把填充的0放在正负号后面

2. 实例

package main

import "fmt"

func main() {
        type Person struct {
                Name string
        }
        var people = Person{Name: "mark"}

        //1.普通占位符
        //%v(相应值的默认格式)
        fmt.Printf("%v", people) //{mark}

        //%+v(打印结构体时,会添加字段名)
        fmt.Printf("%+v", people) //{Name:mark}

        //%#v(相应值的Go语法表示)
        fmt.Printf("%#v", people) //main.Person{Name:"mark"}

        //%T(相应值的类型的Go语法表示)
        fmt.Printf("%T", people) //main.Person

        //%%(字面上的百分号,并非值的占位符)
        fmt.Printf("%%") //%

        //2.布尔占位符
        //%t(true 或 false)
        fmt.Printf("%t", true) //true

        //3.整数占位符
        //%b(二进制表示)
        fmt.Printf("%b", 5) //101

        //%c(相应Unicode码点所表示的字符)
        fmt.Printf("%c", 0x4E2D) //中

        //%d(十进制表示)
        fmt.Printf("%d", 0x12) //18

        //%o(八进制表示)
        fmt.Printf("%o", 10) //12

        //%q(单引号围绕的字符字面值,由Go语法安全地转义)
        fmt.Printf("%q", 0x4E2D) //'中'

        //%x(十六进制表示,字母形式为小写a-f)
        fmt.Printf("%x", 13) //d

        //%X(十六进制表示,字母形式为小写A-F)
        fmt.Printf("%X", 13) //D

        //%U(Unicode格式:U+1234,等同于 "U+%04X")
        fmt.Printf("%U", 0x4E2D) //U+4E2D

        //4.浮点数和复数的组成部分
        //%b(无小数部分的,指数为二的幂的科学计数法)
        fmt.Printf("%b", 10.2) //5742089524897382p-49

        //%e(科学计数法,例如 -1234.456e+78)
        fmt.Printf("%e", 10.2) //1.020000e+01

        //%E(科学计数法,例如 -1234.456E+78)
        fmt.Printf("%E", 10.2) //1.020000E+01

        //%f(有小数点而无指数,例如123.456)
        fmt.Printf("%f", 10.2) //10.200000

        //%g(根据情况选择%e或%f以产生更紧凑的(无末尾的0))
        fmt.Printf("%g", 10.20) //10.2

        //%G(根据情况选择%E或%f以产生更紧凑的(无末尾的0))
        fmt.Printf("%G", 10.20+2i) //(10.2+2i)

        //5.字符串与字节切片
        //%s(输出字符串表示(string类型或[]byte))
        fmt.Printf("%s", []byte("Go语言")) //Go语言

        //%q(双引号围绕的字符串,由Go语法安全地转义)
        fmt.Printf("%q", "Go语言") //"Go语言"

        //%x(十六进制,小写字母,每字节两个字符)
        fmt.Printf("%x", "golang") //676f6c616e67

        //%X(十六进制,大写字母,每字节两个字符)
        fmt.Printf("%X", "golang") //676F6C616E67

        //6.指针
        //%p(十六进制表示,前缀0x)
        fmt.Printf("%p", &people) //0xc0420421d0
}

参考

Copyright © ghostwritten 浙ICP备2020032454号 2022 all right reserved,powered by Gitbook该文件修订时间: 2022-12-22 14:15:47

results matching ""

    No results matching ""