Go语言的fmt
包提供了多种打印相关的函数,主要用于在控制台或其他输出目标上格式化并输出数据。下面是一些常用的print
相关方法的用途和区别:
1.fmt.Print()
- 功能:
fmt.Print()
将参数的内容按默认格式输出到标准输出(通常是控制台),不会添加任何额外的格式或换行符。 - 特点:
- 输出内容之间没有分隔符。
- 不会在输出后自动添加换行符。
2. fmt.Println()
- 功能:
fmt.Println()
将参数的内容按默认格式输出到标准输出,并在每个参数之间自动添加空格,最后添加一个换行符。 - 特点:
- 参数之间用空格分隔。
- 输出内容后会自动添加一个换行符。
3. fmt.Printf()
- 功能:
fmt.Printf()
允许使用格式化字符串来输出内容。您可以指定格式说明符以控制输出的格式。 - 特点:
- 支持各种格式化选项,如整数、浮点数、字符串等。
- 输出不会自动添加换行符,除非在格式字符串中显式包含换行符。
4. fmt.Sprint()
- 功能:
fmt.Sprint()
与fmt.Print()
类似,但它会将格式化后的字符串返回,而不是直接输出到标准输出。 - 特点:
- 返回格式化后的字符串(多个参数间加空格)。
- 可以将其结果存储在变量中或进行进一步处理。
5. fmt.Sprintf()
- 功能:
fmt.Sprintf()
与fmt.Printf()
类似,但它将格式化后的字符串返回,而不是直接输出到标准输出。 - 特点:
- 允许使用格式化字符串来控制输出格式。
- 返回格式化后的字符串,适用于需要将格式化结果作为字符串使用的情况。
6. fmt.Fprint()
, fmt.Fprintf()
, fmt.Fprintln()
- 功能: 这些函数用于将格式化内容输出到指定的
io.Writer
接口(如文件、网络连接等)。 - 特点:
fmt.Fprint()
: 不添加任何分隔符或换行符。fmt.Fprintf()
: 使用格式化字符串来控制输出格式。fmt.Fprintln()
: 在输出内容之间添加空格,最后添加换行符。
总结
fmt.Print()
: 输出内容,之间无分隔符,无换行符。fmt.Println()
: 输出内容,自动分隔和添加换行符。fmt.Printf()
: 格式化输出,支持复杂格式化,输出内容无换行符。fmt.Sprint()
: 格式化内容并返回字符串。fmt.Sprintf()
: 格式化内容并返回字符串,支持复杂格式化。fmt.Fprint()
,fmt.Fprintf()
,fmt.Fprintln()
: 输出到指定io.Writer
,支持不同的格式和功能。
7.常见的格式化占位符
1.%s
: 输出字符串
- 用于格式化字符串类型。
fmt.Printf("Hello, %s!\n", "Alice")
// 输出: Hello, Alice!
2.%d
: 输出整数
- 用于格式化十进制整数类型。
fmt.Printf("Number: %d\n", 42)
// 输出: Number: 42
3.%f
: 输出浮点数
- 用于格式化浮点数类型。
fmt.Printf("Float: %f\n", 3.14159)
// 输出: Float: 3.141590
4.%x
: 输出十六进制整数
- 用于格式化整数为十六进制表示。
fmt.Printf("Hex: %x\n", 255)
// 输出: Hex: ff
5.%o
: 输出八进制整数
- 用于格式化整数为八进制表示。
fmt.Printf("Octal: %o\n", 64)
// 输出: Octal: 100
6.%b
: 输出二进制整数
- 用于格式化整数为二进制表示。
fmt.Printf("Binary: %b\n", 5)
// 输出: Binary: 101
7.%c
: 输出字符
- 用于格式化单个字符(基于其整数值)。
fmt.Printf("Character: %c\n", 65)
// 输出: Character: A
8.%p
: 输出指针
- 用于格式化指针地址。
var x int
fmt.Printf("Pointer: %p\n", &x)
// 输出: Pointer: 0xc0000b4000
9.%v
: 输出默认格式
- 用于格式化值的默认表示形式。
fmt.Printf("Value: %v\n", 123)
// 输出: Value: 123
10.%T
: 输出类型
- 用于输出值的类型。
fmt.Printf("Type: %T\n", 123)
// 输出: Type: int
11.%+v
: 输出结构体时显示字段名
- 用于格式化结构体时,显示字段名。
type Person struct {Name stringAge int
}
p := Person{"Alice", 30}
fmt.Printf("Person: %+v\n", p)
// 输出: Person: {Name:Alice Age:30}
12.%#v
: 输出值的 Go 语法表示
- 用于格式化值为 Go 语言的语法表示。
fmt.Printf("Go syntax: %#v\n", 123)
// 输出: Go syntax: 123
13.%e
: 输出浮点数的科学记数法
- 用于浮点数的科学记数法表示。
fmt.Printf("Scientific: %e\n", 1234.567)
// 输出: Scientific: 1.234567e+03
14.%g
: 输出浮点数的最简洁表示
- 用于浮点数的最简洁表示(自动选择
%f
或%e
)。
fmt.Printf("Compact: %g\n", 155555534.233)
// 输出: Compact: 1.55555534233e+08fmt.Printf("Compact: %g\n", 155534.233)
// 输出: Compact: 155534.233
格式化标志
除了占位符本身,您还可以使用格式化标志来控制输出的宽度、对齐、精度等。常见的格式化标志包括:
%5d
: 输出一个宽度为 5 的整数,右对齐,不足部分填充空格。%-5d
: 输出一个宽度为 5 的整数,左对齐,不足部分填充空格。%.2f
: 输出浮点数,保留两位小数。
fmt.Printf("Right-aligned: %5d\n", 42)
//输出:Right-aligned: 42fmt.Printf("Left-aligned: %-5d\n", 42)
//输出:Left-aligned: 42 fmt.Printf("Float with precision: %.2f\n", 3.14159)
//输出:Float with precision: 3.14