2025/3/19

This commit is contained in:
2025-03-19 14:36:09 +08:00
commit abb37c49a7
18 changed files with 2005 additions and 0 deletions

142
技术/Go/常用包/fmt.md Normal file
View File

@@ -0,0 +1,142 @@
在 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
```