zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Go 包 fmt 打印输出

Go fmt 打印输出
2023-09-11 14:15:45 时间

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
}

参考