fmt print
2021-04-17 本文已影响0人
JunChow520
Go标准库fmt实现了类似C语言printf和scanf的格式化I/O,主要分为向外输出内容和获取输入内容两大部分。
向外输出
向外输出函数分为三类
| 向外输出 | 描述 |
|---|---|
| Print系列 | 将内容输出到系统标准输出os.Stdout
|
| Fprint系列 | 将内容输出到一个io.Writer接口类型的变量中 |
| Sprint系列 | 将传入的数据生成并返回一个字符串 |
Print系列函数会将内容输出到系统标准输出os.Stdout
func Print(a ...interface{}) (n int, err error)
func Println(a ...interface{}) (n int, err error)
func Printf(format string, a ...interface{}) (n int, err error)
| 函数 | 描述 |
|---|---|
| fmt.Print | 输出到控制台,不接受任何格式化操作。 |
| fmt.Println | 输出到控制台并换行 |
| fmt.Printf | 仅打印出格式化的字符串 |
func Print(a ...interface{}) (n int, err error)
func Println(a ...interface{}) (n int, err error)
func Printf(format string, a ...interface{}) (n int, err error)
Fprint系列函数会将传入内容输出到一个io.Writer接口类型的变量中,通常用来向文件中写入内容。
| 函数 | 描述 |
|---|---|
| fmt.Fprint | 输出到io.Writer而非io.Stdout
|
| fmt.Fprintln | 输出到io.Writer并换行 |
| fmt.Fprintf | 格式化并输出到io.Writer
|
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 file_put_content(filename, content string) {
fh, err := os.OpenFile(filename, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
fmt.Println(err)
return
}
now := time.Now().Format("2006-01-02 15:04:05")
_, _ = fmt.Fprintf(fh, "%s %s\n", now, content)
}
func main() {
file_put_content("demo.log", "hello world")
file_put_content("demo.log", "hell word")
}
Sprint系列函数会将传入的数据生成并返回一个字符串
| 函数 | 描述 |
|---|---|
| fmt.Sprint | 返回一个字符串而不带任何输出 |
| fmt.Sprintln | 返回一个字符串且换行 |
| fmt.Sprintf | 格式化并返回一个字符串而不带任何输出 |
func Sprint(a ...interface{}) string
func Sprintln(a ...interface{}) string
func Sprintf(format string, a ...interface{}) string
错误输出
func Errorf(format string, a ...interface{}) error
fmt.Errorf()会根据format参数生成格式化字符串并返回一个error类型的错误对象,可用于自定义错误类型,比如通常在错误中需要获得对应位置信息。
例如:自定义错误类型
err := fmt.Errorf("%s\n", "define error")
格式化占位符
Printf系列函数都支持format格式化参数
func Printf(format string, a ...interface{}) (n int, err error)
func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)
func Sprintf(format string, a ...interface{}) string
func Errorf(format string, a ...interface{}) error
按照格式化占位符被替换的变量类型划分
- 通用占位符
- 字符占位符
- 布尔占位符
- 整数占位符
- 小数占位符
- 序列占位符
- 指针占位符
| 通用占位符 | 描述 |
|---|---|
| %v | 值的默认格式 |
| %+v | 打印结构体时会添加字段名 |
| %#v | 值的Go语法表示 |
| %T | 打印值的Go类型 |
| %% | 字面上的百分号 |
字符占位符
| 字符占位符 | 描述 |
|---|---|
| %s | 直接输出字符串或[]byte字符数组 |
| %q | 值对应的双引号包裹起来的Go语法字符串字面量,必要时会采用安全的转义标识。 |
| %x | 每个字节使用两个字符16进制数表示,16进制小写a-f。 |
| %X | 每个字节使用两个字符16进制数表示,16进制大写A-F。 |
| 布尔占位符 | 描述 |
|---|---|
| %t | 输出布尔值true或false |
| 整数占位符 | 描述 |
|---|---|
| %b | 二进制表示 |
| %c | 相应Unicode码点所表示的字符 |
| %d | 十进制表示 |
| %o | 八进制表示 |
| %x | 十六进制表示,字母形式为小写。 |
| %X | 十六进制表示,字母形式为大写。 |
| %U | Unicode格式 |
| %q | 单引号围绕的字符字面值,由Golang语法安全地转义。 |
| 小数占位符 | 描述 |
|---|---|
| %f | 等同于%.6f,6位小数点,有小数点而无指数。 |
| %e | 等同于%.6e,6位小数点,科学计数法。 |
| %E | 科学计数法 |
| %g | 根据情况选择%e或%f以产生更为紧凑的输出 |
| %G | 根据情况选择%E或%f以产生更为紧凑的输出 |
| 序列占位符 | 描述 |
|---|---|
| %s | 输出字符串表示 |
| %10s | 输出字符串最小宽度为10且右对齐 |
| %-10s | 输出字符串最小宽度为10且左对齐 |
| %.5s | 输出字符串最大宽度为5 |
| %5.10s | 输出字符串最小宽度为5,最大宽度为10。 |
| %-5.10s | 输出字符串最小宽度为5,最大宽度为10,左对齐。 |
| %5.3s | 输出字符串宽度为5,若源字符串宽度大于3则截断。 |
| %010s | 若宽度小于10则在字符串前补零 |
| %q | 双引号围绕的字符串,由Golang语法安全地转义。 |
| 指针占位符 | 描述 |
|---|---|
| %p | 十六进制,前缀0x。 |
| %#p | 不带前缀ox的十六进制 |
标志符
| 标志符 | 描述 |
|---|---|
| + | 总打印数值的正负号 |
| - | 左对齐 |
| # | 备用格式 |
| ‘ ’ | 空格留白 |
| 0 | 填充前导零而非空格 |
宽度标识符
- 宽度会通过紧跟在
%后的十进制数指定,若未指定除必需外不作填充。 - 精度可选,通过宽度后跟
.点号后跟的十进制数指定,若未指定值使用默认。 - 若点号后没跟数字则表示精度未0