可以在官方页面下的 Packages 输入 fmt,里面有这个包中各个函数的介绍以及相关的用法,fmt包主要用来处理输入输出,格式化等相关问题,里面还有相关的例子可以看看,也可以使用goland查看各个函数的用法,下面是常见的输入输出函数的用法:
1. Scan 函数,从标准输入中读取文本,以空格作为分隔符将读取到的值存储到对应类型的变量中,换行符被视为空格,所以以空格和回车分隔输入数据都是可以的,直到读取到对应的参数列表为止,但是一旦数据规模超过了 10 ^ 5 那么使用 fmt.Scan() 或者 fmt.Println() 函数读取和输出数据是非常慢的,如果代码的时间复杂度较高那么肯定是会超时的,这个时候就需要使用 bufio.NewReader() ,bufio.NewWriter() ,fmt.Fscan() ,fmt.Fprintln() 等函数优化读取数据和输出数据的速度:
package main
import "fmt"
func main() {
var (
a int
b int
)
// 输入数据的时候以空格和回车分隔都是可以的, 可以输入多个回车, 回车被视为空格
fmt.Scan(&a, &b)
fmt.Println(a, b)
}
2. Scanln 函数,与 Scan 函数是类似的,从标准输入中读取数据,以空格作为分隔符将读取到的数据存储到对应类型的参数上,遇到换行符就会停止读入,这也是与 Scan 函数不一样的一个点,两个函数其实在读取标准输入的时候都有其对应的应用场景,我们可以根据输入数据是哪一种方式确定使用哪一种方法:
package main
import "fmt"
func main() {
var (
a int
b int
)
// 输入多个空格也是可以的
fmt.Scanln(&a, &b)
fmt.Println(a, b)
}
3. Scanf 函数,从标准输入中读取数据,类似于 c 语言的 scanf 函数,需要设置格式化字符串,以空格为分隔符将读取到的数据存储到对应类型的变量中:
package main
import "fmt"
func main() {
var (
a int
b int
)
// 逗号前面的是格式化字符串, 用来匹配输入的数据
fmt.Scanf("%d %d", &a, &b)
fmt.Println(a, b)
}
4. Sprint 函数,使用默认的格式格式化字符串,当两个操作数都不是字符串的时候那么会添加空格,感觉主要是用来拼接字符串的,返回的结果是字符串类型,并且结果字符串中不会添加换行符,Sprintln 函数与 Sprint 函数类似,只是 Sprintln 函数会在两个操作数之间添加空格并且在末尾添加换行符:
package main
import "fmt"
func main() {
const name, age = "Kim", 22
// 使用默认的格式格式化字符串
s := fmt.Sprint(name, " is ", age, " years old.\n")
fmt.Println(s)
a, b := 10, 2
res := fmt.Sprint(a, b)
fmt.Println(res)
}
5. Sprintf 函数,设置格式化字符串最终返回一个格式化之后的字符串,感觉与 Sprint 函数类似,返回的结果是字符串,并且结果字符串中不会添加换行符:
package main
import "fmt"
func main() {
const name, age = "Kim", 22
s := fmt.Sprintf("%s is %d years old.\n", name, age)
fmt.Println(s)
}
6. Print函数,对于操作数使用默认的格式写入到标准输出中,当两个操作数不是字符串类型的时候会在两个操作数之间添加空格,函数返回的是写入的字节数目,与Sprint函数不一样的一个点是Sprint函数返回的是一个字符串,Print返回的是写入的字节数目,两者都可以用来输出对应的内容:
package main
import "fmt"
func main() {
const name, age = "Kim", 22
// Print函数两个操作数之间不会添加空格所以需要手动添加空格
fmt.Print(name, " is ", age, " years old.\n")
}
7. Println 函数,与 Print 函数类似,Println 函数会在两个操作数之间添加空格并且在末尾会添加换行符,所以 Println 函数可以用来输出一行中以空格分隔的多个元素,以换行符结束,Println 函数返回的是写入的字节数目:
package main
import "fmt"
func main() {
a, b, c := 10, 100, -10
s := "helloworld!"
// count为写入的字节数, _表示忽略掉当前函数的返回值
count, _ := fmt.Println(a, b, s, c)
fmt.Println(count)
}
8. Printf 函数,通过设置的格式化字符串写入到标准输出中,返回的是写入的字节数目:
package main
import "fmt"
func main() {
const name, age = "Kim", 22
fmt.Printf("%s is %d years old.\n", name, age)
}