Go语言学习——标准库fmt、内置函数

内置函数

  内置函数     	                  介绍                  
  close    	            主要用来关闭channel             
   len     	用来求长度,比如string、array、slice、map、channel
   new     	 用来分配内存,主要用来分配值类型,比如int、struct。返回的是指针 
  make     	  用来分配内存,主要用来分配引用类型,比如chan、map、slice  
 append    	           用来追加元素到数组、slice中           

panic和recover 用来做错误处理 错误尝试恢复

panic可以在任何地方引发

recover只有在defer调用的函数中有效

package main

import "fmt"

// panic 和 recover

func funcA(){
	fmt.Println("a")
}

func funcB(){
	// 刚刚打开数据库连接
	defer func ()  {
		err := recover()
		fmt.Println(err)
		fmt.Println("释放数据库连接...")
	}()
	panic("出现严重错误!!!") // 程序崩溃退出
	fmt.Println("b")
}

func funcC(){
	fmt.Println("c")
}

func main() {
	funcA()
	funcB()
	funcC()
}
  1. recover()必须搭配defer使用。
  2. defer一定要在可能引发panic的语句之前定义

fmt

标准库fmt

  • Print函数直接输出内容

  • Printf函数支持格式化输出字符串

  • Println函数会在输出内容的结尾添加一个换行符

格式化占位符

*printf系列函数都支持format格式化参数

通用占位符

占位符 说明
%v 值的默认格式表示
%+v 类似%v,但输出结构体时会添加字段名
%#v 值的Go语法表示
%T 打印值的类型
%% 百分号

布尔型

占位符 说明
%t true或false

整型

占位符 说明
%b 表示为二进制
%c 该值对应的unicode码值
%d 表示为十进制
%o 表示为八进制
%x 表示为十六进制,使用a-f
%X 表示为十六进制,使用A-F
%U 表示为Unicode格式:U+1234,等价于”U+%04X”
%q 该值对应的单引号括起来的go语法字符字面值,必要时会采用安全的转义表示

浮点数与复数

占位符 说明
%b 无小数部分、二进制指数的科学计数法,如-123456p-78
%e 科学计数法,如-1234.456e+78
%E 科学计数法,如-1234.456E+78
%f 有小数部分但无指数部分,如123.456
%F 等价于%f
%g 根据实际情况采用%e或%f格式(以获得更简洁、准确的输出)
%G 根据实际情况采用%E或%F格式(以获得更简洁、准确的输出)

字符串和[]byte

占位符 说明
%s 直接输出字符串或者[]byte
%q 该值对应的双引号括起来的go语法字符串字面值,必要时会采用安全的转义表示
%x 每个字节用两字符十六进制数表示(使用a-f
%X 每个字节用两字符十六进制数表示(使用A-F)

指针

占位符 说明
%p 表示为十六进制,并加上前导的0x

宽度标识符

占位符 说明
%f 默认宽度,默认精度
%9f 宽度9,默认精度
%.2f 默认宽度,精度2
%9.2f 宽度9,精度2
%9.f 宽度9,精度0

其他flag

占位符 说明
’+’ 总是输出数值的正负号;对%q(%+q)会生成全部是ASCII字符的输出(通过转义);
’ ‘ 对数值,正数前加空格而负数前加负号;对字符串采用%x或%X时(% x或% X)会给各打印的字节之间加空格
’-’ 在输出右边填充空白而不是默认的左边(即从默认的右对齐切换为左对齐);
’#’ 八进制数前加0(%#o),十六进制数前加0x(%#x)或0X(%#X),指针去掉前面的0x(%#p)对%q(%#q),对%U(%#U)会输出空格和单引号括起来的go字面值;
‘0’ 使用0而不是空格填充,对于数值类型会把填充的0放在正负号后面;

获取输入

fmt.Scan

fmt.Scanf

fmt.Scanln

package main

import "fmt"

// fmt

func main(){
	fmt.Print("中国")
	fmt.Print("北京")

	fmt.Println("_________")
	fmt.Println("香蕉")
	fmt.Println("西瓜")

	// Printf("格式化字符串", 值)
	// %T: 查看类型
	// %d: 十进制数
	// %b: 二进制数
	// %o: 八进制数
	// %x: 十六进制数
	// %c: 字符
	// %s: 字符串
	// %p: 指针
	// %v: 值
	// %f: 浮点数
	// %t: 布尔值

	var m1 = make(map[string]int, 1)
	m1["理想"] = 100
	fmt.Printf("%v\n", m1) // map[理想:100]
	fmt.Printf("%#v\n", m1) // map[string]int{"理想":100}

	printBaifenbi(90)
	// 整数 字符
	fmt.Printf("%q\n", 65) // 'A'
	// 浮点数和复数
	fmt.Printf("%b\n", 3.14159265352938384626)
	// 字符串
	fmt.Printf("%q\n", "学习思考")
	fmt.Printf("%5.2s\n", "书山有路勤为径")

	// 获取用户输入
	// var s string
	// fmt.Scan(&s)
	// fmt.Println("用户输入的内容是:",s)

	// var (
	// 	name string
	// 	age int
	// 	class string
	// )
	// fmt.Scanf("%s %d %s\n", &name, &age, &class)
	// fmt.Println(name, age, class)

	// fmt.Scanln(&name, &age, &class)
	// fmt.Println(name, age, class)

	fmt.Printf("%b\n", 10)
}

func printBaifenbi(num int) {
	fmt.Printf("%d\n", num)
	fmt.Printf("%d%%\n", num)
}
posted @ 2022-05-17 00:10  寻月隐君  阅读(87)  评论(0编辑  收藏  举报