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()
}
- recover()必须搭配defer使用。
- 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)
}
本文来自博客园,作者:寻月隐君,转载请注明原文链接:https://www.cnblogs.com/QiaoPengjun/p/16279216.html