fmt包含有格式化I/O函数,类似于C语言的printf和scanf。格式字符串的规则来源于C,但更简单一些
标准输出
Print
func Print(a ...interface{}) (n int, err error)
- Print采用默认格式将其参数格式化并写入标准输出。如果两个相邻的参数都不是字符串,会在它们的输出之间添加空格,返回写入的字节数和遇到的任何错误。
Println
func Println(a ...interface{}) (n int, err error)
- Println采用默认格式将其参数格式化并写入标准输出。总是会在相邻参数的输出之间添加空格并在输出结束后添加换行符,返回写入的字节数和遇到的任何错误。
Printf
func Printf(format string, a ...interface{}) (n int, err error)
- Printf根据format参数生成格式化的字符串并写入标准输出,返回写入的字节数和遇到的任何错误。
Fprint
func Fprint(w io.Writer, a ...interface{}) (n int, err error)
func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)
func Fprintln(w io.Writer, a ...interface{}) (n int, err error)
- Fprint系列函数会将内容输出到一个
io.Writer
接口类型的变量w中,我们通常用这个函数往文件中写入内容。
Sprint
func Sprint(a ...interface{}) string
func Sprintf(format string, a ...interface{}) string
func Sprintln(a ...interface{}) string
- Sprint系列函数会把传入的数据生成并返回一个字符串。
Errorf
func Errorf(format string, a ...interface{}) error
- Errorf函数根据format参数生成格式化字符串并返回一个包含该字符串的错误。
标准输入
Scan
func Scan(a ...interface{}) (n int, err error)
- 功能:读取由空格分隔的输入数据,并将数据存储到提供的参数中。它不需要格式化字符串,而是依次将输入的值赋给传入的变量。
- 输入终止条件:输入以空格或换行符为分隔符,读取的值必须与传入的参数数量匹配。
package main
import (
"fmt"
)
func main() {
var a string
var b string
//此处必须使用接收参数的变量指针
fmt.Scan(&a, &b)
fmt.Print(a, b)
}
Scanf
func Scanf(format string, a ...interface{})(n int, err error)
- 功能:根据格式化字符串 format 从标准输入读取数据,并将数据存储到提供的参数中。
- 输入终止条件:Scanf 读取输入时,会忽略空白字符,并且根据格式化字符串解析输入内容。输入可以包含换行符,但解析会按照格式字符串中的要求进行。
Scanln
func Scanln(a ...interface{}) (n int, err error)
- 功能:与
fmt.Scan
类似,但会在读取完所有指定的参数后检查是否有多余的输入。它要求读取的最后一个输入参数必须位于行的末尾,否则会返回一个错误。
- 输入终止条件:读取到换行符结束,并要求读取的参数数量与传入的变量数量匹配。
package main
import "fmt"
func main() {
fmt.Println("Please Input:")
var data string
fmt.Scanln(&data)
fmt.Printf("User Input: %s\n", data)
}
IO输入输出
这些函数是针对io.Writer
、io.Reader
进行输入和输出
输出
func Fprint(w io.Writer, a ...interface{}) (n int, err error)
func Fprintln(w io.Writer, a ...interface{}) (n int, err error)
func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)
输入
func Fscan(r io.Reader, a ...interface{}) (n int, err error)
func Fscanln(r io.Reader, a ...interface{}) (n int, err error)
func Fscanf(r io.Reader, format string, a ...interface{}) (n int, err error)
string输入输出
这些函数是针对string
进行输入和输出
输出
func Sprint(a ...interface{}) string
func Sprintln(a ...interface{}) string
func Sprintf(format string, a ...interface{}) string
输入
func Sscan(str string, a ...interface{}) (n int, err error)
func Sscanln(str string, a ...interface{}) (n int, err error)
func Sscanf(str string, format string, a ...interface{}) (n int, err error)
格式化占位符
通用
占位符 |
说明 |
例子 |
结果 |
%v |
相应值的默认格式 |
Printf("%v",person) |
{lucy 18} |
%+v |
类似%v,但输出结构体时会添加字段名 |
Printf("%+v",person) |
{name:lucy age:18} |
%#v |
相应值的Go语法表示 |
Printf("#v",person) |
main.Person{name:"lucy", age:18} |
%T |
相应值的类型的Go语法表示 |
Printf("%T",person) |
main.Person |
%% |
字面上的百分号,并非值的占位符 |
Printf("%%") |
% |
布尔
占位符 |
说明 |
例子 |
结果 |
%t |
单词true或false |
Printf("%t",true) |
true |
整数
占位符 |
说明 |
例子 |
结果 |
%b |
二进制表示 |
Printf("%b",5) |
101 |
%c |
该值对应的unicode码值 |
Printf("%c",0x4E2d) |
中 |
%d |
十进制表示 |
Printf("%d",0x12) |
18 |
%02d |
两位整数 |
Printf("%02d",8) |
08 |
%o |
八进制表示 |
Printf("%o",10) |
12 |
%q |
单引号围绕的字符字面值,由Go语法安全的转译 |
Printf("%q",0x4E2d) |
中 |
%x |
十六进制表示,字母形式为小写a-f |
Printf("%x",13) |
d |
%X |
十六进制表示,字母形式为大写A-F |
Printf("%X",13) |
D |
%U |
表示为Unicode格式:U+1234 ,等价于U+%04X |
Printf("%U",0x4E2d) |
U+4E2D |
浮点数和复数
占位符 |
说明 |
例子 |
结果 |
%e |
科学计数法,如-1234.456e+78 |
Printf("%e",10.20) |
1.020000e+01 |
%E |
科学计数法,如-1234.456E+78 |
Printf("%E",10.20) |
1.020000E+01 |
%f |
有小数部分但无指数部分 |
Printf("%.2f", 3.1415926) |
3.14 |
%9f |
宽度9,默认精度 |
Printf("%9f", 88.88) |
88.880000 |
%.2f |
默认宽度,精度2 |
Printf("%.2f", 88.8888) |
88.88 |
%g |
根据实际情况采用%e 或%f 格式(以获得更简洁、准确的输出) |
Printf("%g",10.20) |
10.2 |
%G |
根据实际情况采用%E 或%F 格式(以获得更简洁、准确的输出) |
Printf("%G",10.20) |
10.2+2i |
字符串和字节数组
占位符 |
说明 |
例子 |
结果 |
%s |
输出字符串表示(string类型或[]byte) |
Printf("%s",[]byte("Go语言")) |
Go语言 |
%q |
双引号围绕的字符串,由Go语法安全的转译 |
Printf("%q","Go语言") |
"Go语言" |
%x |
十六进制,小写字母,每字节两个字符 |
Printf("%x","golang") |
676f6c616e67 |
%X |
十六进制,大写字母,每字节两个字符 |
Printf("%X","golang") |
676F6C616E67 |
指针
占位符 |
说明 |
例子 |
结果 |
%p |
十六进制表示,前缀 0x |
Printf("%p",&person) |
0xc0420341c0 |
%#p |
十六进制表示,不带前缀 0x |
Printf("%#p",&person) |
c0420341c0 |