Go 常用库-fmt | 青训营

57 阅读3分钟

常用库

fmt

Print, Println, Printf

用法:

	fmt.Print("hello world\n")
	fmt.Println("hello world")
	fmt.Printf("hello %s\n", "world")

它们最终都调用Fpintf。

  • Fprint。将内容输出到一个io.Writer接口类型的变量w中。一般用在写文件中。
  • Sprint。把传入的数据生成并返回一个字符串。
  • Errorf。根据format参数生成格式化字符串并返回一个包含该字符串的错误。

格式化占位符:

占位符说明
%v值的默认格式表示
%+v类似%v,但输出结构体时会添加字段名
%#v值的Go语法表示
%T打印值的类型
%%打印出一个百分号
%ttrue或false
%s直接输出字符串或者[]byte
%q该值对应的双引号括起来的go语法字符串字面值,必要时会采用安全的转义表示
%x对字符串每个字节,用两字符十六进制数表示(使用a-f)
%X对字符串每个字节,用两字符十六进制数表示(使用A-F)
%b表示为二进制
%c该值对应的unicode码值
%d表示为十进制
%o表示为八进制
%x将数字表示为十六进制,使用a-f
%X数字表示为十六进制,使用A-F
%U表示为Unicode 格式:U+1234,等价于”U+%04X”%q该值对应的单引号括起来的go语法字符字面值,必要时会采用安全的转义表示
%p指针base 16表示法,带前导0x
type st struct {
	name string
	id   int32
}

func main() {
	fmt.Printf("int %v,string %v,struct %v\n", 123, "abc", st{"name", 1})
	//int 123,string abc,struct {name 1}
	fmt.Printf("struct %+v\n", st{"name", 1})
	//struct {name:name id:1}
	fmt.Printf("int %#v,string %#v,struct %#v\n", 123, "abc", st{"name", 1})
	//int 123,string "abc",struct main.st{name:"name", id:1}
	fmt.Printf("int %T,string %T,struct %T\n", 123, "abc", st{"name", 1})
	//int int,string string,struct main.st
	fmt.Printf("%%\n")
	//%
	fmt.Printf("false: %t,true %t\n", false, true)
	//false: false,true true
	fmt.Printf("%s\n", "hello world\n")
	//hello world
	//
	fmt.Printf("%q\n", "hello world\n")
	//"hello world\n"
	fmt.Printf("%x\n", "abcdef")
	//616263646566
	fmt.Printf("%X\n", "ABCDEF")
	//414243444546
	fmt.Printf("%x\n", 15)
	//f
	fmt.Printf("%X\n", 15)
	//F
	fmt.Printf("%b\n", 15)
	//1111
}

宽度由动词前面的可选十进制数字指定。如果不存在,则宽度是表示该值所需的任何值。在(可选)宽度之后指定精度,后面跟着一个十进制数。如果没有句点,则使用默认精度。例如:

%f     default width, default precision
%9f    width 9, default precision
%.2f   default width, precision 2
%9.2f  width 9, precision 2
%9.f   width 9, precision 0

宽度和精度是以 Unicode 代码点为单位测量的,即符文。

对于浮点值,宽度设置字段的最小宽度,精度设置小数点后的位数(如果适用)。 例如:

	fmt.Printf("%6.2f |", 1.2)
	//  1.20 |

fmt.Scan

  • 从标准输入扫描文本,读取由空白符分隔的值保存到传递给本函数的参数中,换行符视为空白符

  • 函数返回成功扫描的数据个数n和遇到的任何错误error

fmt.Scanf

实际使用的是Fscanf,以format定义的格式来进行输入。

fmt.Scanln

  • Scanln函数会一次性读取多个输入值,并将它们存储到传入的参数中。使用Scanln函数时,需要提供与输入值对应的变量作为参数。

fmt.Fsanf

将内容从一个io.Reader接口类型的变量r中读取出来,将连续的以空格分隔的值存储到由格式确定的连续的参数中。