在 go 语言中,格式化输出是一个非常常用的功能,特别是在处理字符串、数字和其他数据类型时。go 提供了丰富的格式化选项,通过占位符来控制输出的格式。本文将详细介绍 go 语言中常用的格式化占位符及其用法。
基本格式化函数
go 语言提供了几个内置的格式化函数,这些函数主要位于 fmt 包和 log 包中:
fmt 包
fmt.printf(format string, a ...interface{}):格式化输出到标准输出。
fmt.sprintf(format string, a ...interface{}):格式化输出到字符串。
fmt.fprintf(w io.writer, format string, a ...interface{}):格式化输出到 io.writer。
log 包
log.printf(format string, v ...interface{}):格式化输出到日志。
常用的格式化占位符
字符串格式化
| 占位符 | 描述 | 示例 |
|---|---|---|
| %s | 格式化字符串 | fmt.printf("%s", "hello") |
| %q | 格式化字符串,用双引号包围 | fmt.printf("%q", "hello") |
数字格式化
整数
| 占位符 | 描述 | 示例 |
|---|---|---|
| %d | 十进制整数 | fmt.printf("%d", 123) |
| %b | 二进制整数 | fmt.printf("%b", 123) |
| %o | 八进制整数 | fmt.printf("%o", 123) |
| %x | 十六进制整数(小写字母) | fmt.printf("%x", 123) |
| %x | 十六进制整数(大写字母) | fmt.printf("%x", 123) |
| %c | ascii 码对应的字符 | fmt.printf("%c", 65) |
| %u | unicode 码点 | fmt.printf("%u", 'a') |
浮点数
| 占位符 | 描述 | 示例 |
|---|---|---|
| %f | 浮点数 | fmt.printf("%f", 123.456) |
| %e | 科学记数法(小写字母 e) | fmt.printf("%e", 123.456) |
| %e | 科学记数法(大写字母 e) | fmt.printf("%e", 123.456) |
| %g | 根据值的大小选择 %e 或 %f | fmt.printf("%g", 123.456) |
| %g | 根据值的大小选择 %e 或 %f | fmt.printf("%g", 123.456) |
布尔值
| 占位符 | 描述 | 示例 |
|---|---|---|
| %t | 布尔值 | fmt.printf("%t", true) |
其他类型
| 占位符 | 描述 | 示例 |
|---|---|---|
| %p | 指针地址 | fmt.printf("%p", &value) |
| %t | 类型名称 | fmt.printf("%t", value) |
特殊格式化
| 占位符 | 描述 | 示例 |
|---|---|---|
| %v | 格式化任何值,默认格式 | fmt.printf("%v", "hello") |
| %+v | 格式化任何值,包含结构体字段 | fmt.printf("%+v", struct{ name string }{"alice"}) |
| %#v | 格式化任何值,go 语法格式 | fmt.printf("%#v", "hello") |
自定义宽度和精度
| 占位符 | 描述 | 示例 |
|---|---|---|
| %wd | 设置最小宽度,不足部分用空格填充 | fmt.printf("%5d", 123) |
| %0wd | 设置最小宽度,不足部分用零填充 | fmt.printf("%05d", 123) |
| %wf | 设置浮点数的小数位数 | fmt.printf("%.2f", 123.456) |
对齐方式
| 占位符 | 描述 | 示例 |
|---|---|---|
| %-w | 左对齐 | fmt.printf("%-5d", 123) |
| %+w | 右对齐(默认) | fmt.printf("%+5d", 123) |
示例代码
fmt 包示例
package main
import (
"fmt"
)
func main() {
// 字符串格式化
fmt.printf("string: %s\n", "hello")
fmt.printf("quoted string: %q\n", "hello")
// 数字格式化
fmt.printf("decimal: %d\n", 123)
fmt.printf("binary: %b\n", 123)
fmt.printf("octal: %o\n", 123)
fmt.printf("hexadecimal (lower): %x\n", 123)
fmt.printf("hexadecimal (upper): %x\n", 123)
fmt.printf("character: %c\n", 65)
fmt.printf("unicode: %u\n", 'a')
// 浮点数格式化
fmt.printf("float: %f\n", 123.456)
fmt.printf("scientific (lower): %e\n", 123.456)
fmt.printf("scientific (upper): %e\n", 123.456)
fmt.printf("general (lower): %g\n", 123.456)
fmt.printf("general (upper): %g\n", 123.456)
// 布尔值格式化
fmt.printf("boolean: %t\n", true)
// 指针地址格式化
var value int = 123
fmt.printf("pointer: %p\n", &value)
// 类型名称格式化
fmt.printf("type: %t\n", value)
// 特殊格式化
fmt.printf("default format: %v\n", "hello")
fmt.printf("struct fields: %+v\n", struct{ name string }{"alice"})
fmt.printf("go syntax: %#v\n", "hello")
// 自定义宽度和精度
fmt.printf("width: %5d\n", 123)
fmt.printf("zero-padded width: %05d\n", 123)
fmt.printf("precision: %.2f\n", 123.456)
// 对齐方式
fmt.printf("left-aligned: %-5d\n", 123)
fmt.printf("right-aligned: %+5d\n", 123)
}
log 包示例
package main
import (
"log"
)
func main() {
log.printf("log message: %s", "hello")
}
以上就是go语言中的格式化输出占位符的用法详解的详细内容,更多关于go格式化输出占位符的资料请关注代码网其它相关文章!
发表评论