fmt标准库学习测试
fmt.Print系列
输出到终端,
fmt.Sprint系列
输出到变量,实际就是拼接字符串
fmt.Fprint系列
输出到文件
fmt.Scan系列
从标准输入读取
fmt.Fscan系列
从文件中读取
fmt.Sscan系列
从字符串中读取
Print系列
向外输出到终端一共有三个函数?fmt.Print()
,fmt.Printf()
,fmt.Println()
。
fmt.Print
fmt.Print()
原样输出字符串,不带换行符。
func main() {
fmt.Print("aa")
fmt.Print("aa")
}
输出四个连续的没有分割的一串字符:
aaaa
也可以手动加上换行符\n
,主要这里是反斜杠\
func main() {
fmt.Print("二进制\n")
fmt.Print("二进制显示\n")
}
显示效果如下:
二进制
二进制显示
fmt.Println
gfmt.Println()
也是输出字符串,但是结尾自带回车换行符。跟fmt.Print()
的区别就是带不带换行符这么一点点。
func main() {
fmt.Println("aa")
fmt.Println("aa")
}
运行效果如下:
aa
aa
fmt.Printf
fmt.Printf()
这个用的最多,可以使用占位符,末尾不带回车换行符。如下代码占位符%b
是二进制显示变量a
的数据,占位符%d
整数型十进制显示变量a
的数据。
func main() {
a := 0b1100
fmt.Printf("二进制显示a:%b \n", a)
fmt.Printf("二进制显示a:%d \n", a)
}
运行效果如下:
二进制显示a:1100
二进制显示a:12
Sprint系列
Sprint
fmt.Sprint()
通常用它拼接字符串,他的功能就跟c := "aa" + "bb"
一个样。看如下代码:
func main() {
a := "aa"
b := "bb"
c := fmt.Sprint(b, a)
fmt.Println(c)
}
运行效果:
bbaa
Sprintln
fmt.Sprintln()
是在拼接的两个字符串中间加空格。
func main() {
a := "aa"
b := "bb"
c := fmt.Sprintln(b, a)
fmt.Println(c)
}
运行后输出:
bb aa
Sprintf
fmt.Sprintf()
就是拼接字符串是可以使用占位符。如下代码:
func main() {
a := "圆周率是:%.7f"
b := 3.1415926
c := fmt.Sprintf(a, b)
fmt.Println(c)
}
运行效果如下:
圆周率是:3.1415926
Scan系列
Scan
fmt.Scan()
官方说法叫从标准输入扫描文本。说白了就是从终端,命令行获取你输入的文本。fmt.Scan()
是检测到回车或者空格就算分隔,你指定几个变量接收就扫描几次。比如下面的例子中,先输入啊啊
回车,在输入18
回车,在输入1
回车和直接输入啊啊 18 1
回车得到的结果一样。看下例:
func main() {
var (
name string
age int
ok bool
)
fmt.Scan(&name, &age, &ok)
fmt.Printf("name:[%s] age:[%d],ok:[%t]\n", name, age, ok)
}
这里是直接根据变量的内存地址去修改数据。去掉’&’不能正常运行。
Scanf
fmt.Scanf()
一样也是用空格分割,用回车结束。不一样的地方是它会用你指定的格式去读取输入的数据。如下代码:
func main() {
var (
name string
age int
ok bool
)
fmt.Scanf("1:%s 2:%d 3:%t", &name, &age, &ok)
fmt.Printf("name:[%s] age:[%d],ok:[%t]\n", name, age, ok)
}
如果单纯的输入啊啊 18 ture
程序根本扫描不到输入的数据,必须要按你指定的格式1:哦哦 2:30 3:true
才能扫描到输入的数据。
Scanln
fmt.Scanln()
一般用的最多。这个跟Scan
的区别是,只要见到回车
就当做你输入完毕了。都是用空格分隔。
func main() {
var (
name string
age int
ok bool
)
fmt.Scanln(&name, &age, &ok)
fmt.Printf("name:[%s] age:[%d],ok:[%t]\n", name, age, ok)
}