142 lines
4.3 KiB
Markdown
142 lines
4.3 KiB
Markdown
在 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
|
||
``` |