2025-03-19 14:36:09 +08:00

142 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

在 Go 语言中,`fmt` 包是用于格式化输入和输出的核心工具包,提供了许多常用的函数来处理标准输入、输出以及字符串的格式化操作。以下是一些常用的 `fmt` 包函数及其使用方法:
---
### **1. 格式化输出**
- **`Print(a ...interface{}) (n int, err error)`**
将参数直接输出到标准输出(通常是终端),非字符串参数之间会添加空格,但不会自动换行。
示例:
```go
fmt.Print("Hello", "World") // 输出: HelloWorld
fmt.Print("Hello", " ", "World") // 输出: Hello World
```
- **`Printf(format string, a ...interface{}) (n int, err error)`**
根据格式化字符串 `format` 输出内容,支持丰富的格式化占位符(如 `%d`、`%s` 等)。
示例:
```go
name := "Alice"
age := 30
fmt.Printf("Name: %s, Age: %d\n", name, age) // 输出: Name: Alice, Age: 30
```
- **`Println(a ...interface{}) (n int, err error)`**
类似于 `Print`,但在输出末尾自动添加换行符,并且每个参数之间会自动加空格。
示例:
```go
fmt.Println("Hello", "World") // 输出: Hello World
```
---
### **2. 格式化生成字符串**
- **`Sprint(a ...interface{}) string`**
返回格式化后的字符串,但不直接输出到标准输出。
示例:
```go
str := fmt.Sprint("Hello", " ", "World")
fmt.Println(str) // 输出: Hello World
```
- **`Sprintf(format string, a ...interface{}) string`**
根据格式化字符串生成一个新的字符串,但不直接输出到标准输出。
示例:
```go
name := "Bob"
age := 25
str := fmt.Sprintf("Name: %s, Age: %d", name, age)
fmt.Println(str) // 输出: Name: Bob, Age: 25
```
- **`Sprintln(a ...interface{}) string`**
类似于 `Sprint`,但会在末尾添加换行符。
示例:
```go
str := fmt.Sprintln("Hello", "World")
fmt.Print(str) // 输出: Hello World
```
---
### **3. 格式化写入文件或缓冲区**
- **`Fprint(w io.Writer, a ...interface{}) (n int, err error)`**
将参数写入到指定的 `io.Writer`(如文件或缓冲区)。
示例:
```go
var buf bytes.Buffer
fmt.Fprint(&buf, "Hello", " ", "World")
fmt.Println(buf.String()) // 输出: Hello World
```
- **`Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)`**
根据格式化字符串将内容写入到指定的 `io.Writer`。
示例:
```go
var buf bytes.Buffer
fmt.Fprintf(&buf, "Name: %s, Age: %d", "Alice", 30)
fmt.Println(buf.String()) // 输出: Name: Alice, Age: 30
```
- **`Fprintln(w io.Writer, a ...interface{}) (n int, err error)`**
类似于 `Fprint`,但在末尾添加换行符。
示例:
```go
var buf bytes.Buffer
fmt.Fprintln(&buf, "Hello", "World")
fmt.Println(buf.String()) // 输出: Hello World
```
---
### **4. 格式化输入**
- **`Scan(a ...interface{}) (n int, err error)`**
从标准输入读取数据并存储到变量中,按空格分隔输入值。
示例:
```go
var name string
var age int
fmt.Print("请输入姓名和年龄:")
fmt.Scan(&name, &age)
fmt.Printf("姓名:%s年龄%d\n", name, age)
```
- **`Scanf(format string, a ...interface{}) (n int, err error)`**
根据格式化字符串从标准输入读取数据。
示例:
```go
var name string
var age int
fmt.Print("请输入姓名和年龄(格式:姓名 年龄):")
fmt.Scanf("%s %d", &name, &age)
fmt.Printf("姓名:%s年龄%d\n", name, age)
```
- **`Scanln(a ...interface{}) (n int, err error)`**
类似于 `Scan`,但会以换行符结束输入。
示例:
```go
var name string
var age int
fmt.Print("请输入姓名和年龄:")
fmt.Scanln(&name, &age)
fmt.Printf("姓名:%s年龄%d\n", name, age)
```
---
### **5. 常用格式化占位符**
`fmt` 包中的格式化字符串支持多种占位符,以下是一些常用示例:
- **`%v`**:打印值的默认格式。
- **`%T`**:打印值的类型。
- **`%d`**:打印整数(十进制)。
- **`%f`**:打印浮点数。
- **`%s`**:打印字符串。
- **`%t`**:打印布尔值(`true` 或 `false`)。
- **`%p`**:打印指针地址。
示例:
```go
fmt.Printf("Value: %v, Type: %T\n", 42, 42) // 输出: Value: 42, Type: int
```