1.输出控制台
1.1 Printf
Printf
根据format
参数生成格式化的字符串并写入标准输出。返回写入的字节数和遇到的任何错误。
动 词 |
功 能 |
%v |
按值的本来值输出 |
%+v |
在 %v 基础上,对结构体字段名和值进行展开 |
%#v |
输出 Go 语言语法格式的值 |
%T |
输出 Go 语言语法格式的类型和值 |
%% |
输出 % 本体 |
%b |
整型以二进制方式显示 |
%o |
整型以八进制方式显示 |
%d |
整型以十进制方式显示 |
%x |
整型以十六进制方式显示 |
%X |
整型以十六进制、字母大写方式显示 |
%U |
Unicode 字符 |
%f |
浮点数 |
%p |
指针,十六进制方式显示 |
%c |
数值对应的 Unicode 编码字符 |
%s |
直接输出字符串或者[]byte |
%t |
输出值的 true 或 false |
2.打印字符串
str := "hello word" fmt.Printf("%%s-> %s \n",str) fmt.Printf("%%v-> %v \n",str)
|
3.打印布尔类型
fmt.Printf("%%t-> %t \n", b)
|
4.打印浮点型
格式 |
描述 |
%f |
默认宽度,默认精度 |
%9f |
宽度9,默认精度 |
%.2f |
默认宽度,精度2 |
%9.2f |
宽度9,精度2 |
%9.f |
宽度9,精度0 |
f := 1.234567890 fmt.Printf("默认宽度,默认精度:%f \n", f) fmt.Printf("宽度9,默认精度:%9f \n", f) fmt.Printf("默认宽度,精度2:%.2f \n", f) fmt.Printf("宽度9,精度2:%9.2f \n", f) fmt.Printf("宽度9,精度0 :%9.f \n", f)
|
5.打印整数
a := 54321 fmt.Printf("十进制:%d\n",a) fmt.Printf("二进制:%b\n",a) fmt.Printf("八进制:%o\n",a) fmt.Printf("十六进制:%x\n",a) fmt.Printf("十六进制,字母大写:%X\n",a)
|
6.打印指针
str := "hello" fmt.Printf("打印指针:%p\n", &str)
|
7.打印变量类型
arr := []int{1, 2, 3, 4, 5, 6} fmt.Printf("arr类型: %T\n", arr)
map1 := map[string]int{ "张三": 20, "李四": 23, } fmt.Printf("map1类型: %T\n", map1)
fruit := struct { name string price float64 }{"香蕉", 4.99} fmt.Printf("fruit类型: %T\n", fruit)
|
8.打印结构体
people := struct { name, home, school string }{"张三", "北京", "北京大学"} fmt.Printf("%v\n", people) fmt.Printf("%+v\n", people) fmt.Printf("%#v\n", people)
|
9.打印Unicode
fmt.Printf("%U\n", 'A') fmt.Printf("%c\n", 65)
|
1.2 Print
Print
: 采用默认格式将其参数格式化并写入标准输出。如果两个相邻的参数都不是字符串,会在它们的输出之间添加空格。
1.打印相邻的字符串
fmt.Print("hello","word","!") fmt.Print("hello","word",2,3,"!")
|
如果两个相邻的参数都不是字符串,会在它们的输出之间添加空格,注意的是,不会自动换行。
1.3 Println
Println
: 采用默认格式将其参数格式化并写入标准输出。总是会在相邻参数的输出之间添加空格并在输出结束后添加换行符。
fmt.Println("hello","word",2,3,"!") fmt.Println("hello","word","!")
|
2.输出到文件
方法名 |
描述 |
Fprintln |
功能和Println 一样,但可以输出到文件 |
Fprintf |
功能和Printf 一样,但可以输出到文件 |
Fprint |
功能和Print 一样,但可以输出到文件 |
上述方法,不但可以输出到文件,也可以输出到控制台。
2.1 输出到控制台
_, _ = fmt.Fprintln(os.Stdout, "hello","go") _, _ = fmt.Fprintln(os.Stdout, "hello","php")
|
2.2 输出到文件
file, err := os.OpenFile("./test.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, os.ModePerm) if err != nil { fmt.Println(err.Error()) }
_, err = fmt.Fprintln(file, "hello", "word") if err != nil { fmt.Println(err.Error()) }
|
3.生成字符串
方法名 |
描述 |
Sprintf |
同Printf 一样,但是结果不输出到控制台,而是直接返回 |
Sprint |
同Print 一样,但是结果不输出到控制台,而是直接返回 |
Sprintln |
同Println 一样,但是结果不输出到控制台,而是直接返回 |
sprintf := fmt.Sprintf("水果:%s 价格:%.3f", "香蕉", 1.99) sprint := fmt.Sprint("I", "LOVE", "YOU") sprintln := fmt.Sprintln("I", "LOVE", "YOU") fmt.Printf("Sprintf:%s\n",sprintf) fmt.Printf("sprint:%s\n",sprint) fmt.Printf("sprintln:%s\n",sprintln)
safeConnect
|
4.生成错误类型
err := fmt.Errorf("错误信息:%s", "参数不全") fmt.Printf("类型:%T 内容: %v",err,err)
|
5.接收控制台输入
5.1 Scan
接收终端输入,按照参数输入顺序赋值,参数间以空格(或换行)间隔,如果输入的参数少于接收的参数则会报错。类型不一致时也会报错。当参数输入数量不够时,换行时会继续等待输入。
func main() { var ( name string age int64 isBody bool ) _, err := fmt.Scan(&name, &age, &isBody) if err != nil { fmt.Println(err.Error()) return } fmt.Printf("name:%s age: %d isBody:%t", name, age, isBody) }
|
5.2 Scanf
接收终端输入,按照format
参数指定的格式接收参数.当参数输入数量不够时,换行时会直接输出.
func main() { var ( name string age int isBody bool ) _, err := fmt.Scanf("a:%s b:%d c:%t", &name, &age, &isBody) if err != nil { fmt.Println(err) return } fmt.Printf("name:%s age:%d isBody:%t", name, age, isBody) }
|
5.3 Scanln
Scanln
类似Scan
,它在遇到换行时才停止扫描。最后一个数据后面必须有换行或者到达结束位置。
func main() { var ( name string age int64 isBody bool ) _, err := fmt.Scanln(&name, &age, &isBody) if err != nil { fmt.Println(err) return } fmt.Printf("name:%s age: %d isBody:%t", name, age, isBody) }
|