在 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 ```