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

4.3 KiB
Raw Blame History

在 Go 语言中,fmt 包是用于格式化输入和输出的核心工具包,提供了许多常用的函数来处理标准输入、输出以及字符串的格式化操作。以下是一些常用的 fmt 包函数及其使用方法:


1. 格式化输出

  • Print(a ...interface{}) (n int, err error)
    将参数直接输出到标准输出(通常是终端),非字符串参数之间会添加空格,但不会自动换行。
    示例:

    fmt.Print("Hello", "World") // 输出: HelloWorld
    fmt.Print("Hello", " ", "World") // 输出: Hello World
    
  • Printf(format string, a ...interface{}) (n int, err error)
    根据格式化字符串 format 输出内容,支持丰富的格式化占位符(如 %d%s 等)。
    示例:

    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,但在输出末尾自动添加换行符,并且每个参数之间会自动加空格。
    示例:

    fmt.Println("Hello", "World") // 输出: Hello World
    

2. 格式化生成字符串

  • Sprint(a ...interface{}) string
    返回格式化后的字符串,但不直接输出到标准输出。
    示例:

    str := fmt.Sprint("Hello", " ", "World")
    fmt.Println(str) // 输出: Hello World
    
  • Sprintf(format string, a ...interface{}) string
    根据格式化字符串生成一个新的字符串,但不直接输出到标准输出。
    示例:

    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,但会在末尾添加换行符。
    示例:

    str := fmt.Sprintln("Hello", "World")
    fmt.Print(str) // 输出: Hello World
    

3. 格式化写入文件或缓冲区

  • Fprint(w io.Writer, a ...interface{}) (n int, err error)
    将参数写入到指定的 io.Writer(如文件或缓冲区)。
    示例:

    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
    示例:

    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,但在末尾添加换行符。
    示例:

    var buf bytes.Buffer
    fmt.Fprintln(&buf, "Hello", "World")
    fmt.Println(buf.String()) // 输出: Hello World
    

4. 格式化输入

  • Scan(a ...interface{}) (n int, err error)
    从标准输入读取数据并存储到变量中,按空格分隔输入值。
    示例:

    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)
    根据格式化字符串从标准输入读取数据。
    示例:

    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,但会以换行符结束输入。
    示例:

    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:打印布尔值(truefalse)。
  • %p:打印指针地址。

示例:

fmt.Printf("Value: %v, Type: %T\n", 42, 42) // 输出: Value: 42, Type: int