ZetCode

Golang fmt.Print 函数

最后修改时间 2025 年 5 月 8 日

本教程解释了如何在 Go 中使用 fmt.Print 函数。我们将通过 Go 程序中打印的实际示例来介绍基本输出。

fmt.Print 函数在不进行格式化的情况下写入标准输出。它按出现的顺序打印其参数,并在它们之间添加空格。与 fmt.Println 不同,它不在末尾添加换行符。

在 Go 中,fmt.Print 是用于 I/O 操作的 fmt 包的一部分。当您不需要特殊的格式化或换行控制时,它对于简单的输出很有用。

基本的 fmt.Print 示例

fmt.Print 最简单的用法是将值输出到控制台。此示例演示了不同值类型的基本打印。
注意:值之间会用空格隔开。

basic_print.go
package main

import "fmt"

func main() {
    fmt.Print("Hello, ")
    fmt.Print("World!")
    fmt.Print(42)
    fmt.Print(true)
    fmt.Print("\n") // Manual newline
}

输出出现在一行上:“Hello, World!42true”。请注意值是如何连接在一起的,而没有自动空格或换行符。

打印多个值

fmt.Print 可以接受不同类型的多个参数。此示例展示了一起打印各种数据类型。

multiple_values.go
package main

import "fmt"

func main() {
    name := "Alice"
    age := 30
    pi := 3.14159
    
    fmt.Print("Name: ", name, " Age: ", age, " Pi: ", pi, "\n")
    fmt.Print("Types - name: ", fmt.Sprintf("%T", name), 
              " age: ", fmt.Sprintf("%T", age), "\n")
}

该函数会自动将值转换为字符串,并用空格分隔它们。输出显示所有值都在一行上。

不带空格打印

要打印没有自动空格的值,请先将它们连接起来。此示例演示了如何控制输出中的空格。

no_spaces.go
package main

import "fmt"

func main() {
    fmt.Print("The answer is" + " " + fmt.Sprint(42) + "\n")
    fmt.Print("No", "Spaces", "Between", "Words", "\n")
    fmt.Print("Concatenated" + "String" + "\n")
}

使用 + 运算符进行字符串连接可避免自动空格。输出显示紧密排列的文本,没有额外的空格。

打印特殊字符

fmt.Print 可以处理像制表符和换行符这样的特殊字符。此示例展示了在输出中使用转义序列。

special_chars.go
package main

import "fmt"

func main() {
    fmt.Print("First line\nSecond line\n")
    fmt.Print("Column1\tColumn2\tColumn3\n")
    fmt.Print("Backslash: \\ \t Quote: \" \t Apostrophe: '\n")
    fmt.Print("Alert: \a \t Backspace: \b \t Form feed: \f\n")
}

转义序列按预期工作,可以控制输出格式。请注意,某些特殊字符在不同终端上的行为可能不同。

打印结构体和切片

fmt.Print 可以打印结构体和切片等复杂类型。此示例演示了如何打印复合数据类型。

composite_types.go
package main

import "fmt"

type Person struct {
    Name string
    Age  int
}

func main() {
    p := Person{"Bob", 25}
    nums := []int{1, 2, 3, 4, 5}
    
    fmt.Print("Person: ", p, "\n")
    fmt.Print("Numbers: ", nums, "\n")
    fmt.Print("Slice capacity: ", cap(nums), "\n")
}

复合类型以默认格式打印。有关自定义格式,请考虑使用带有格式说明符的 fmt.Printf

打印到文件

fmt.Fprint 是一个通用的版本,它写入任何 io.Writer。此示例演示了如何将内容打印到文件而不是标准输出。

file_print.go
package main

import (
    "fmt"
    "os"
)

func main() {
    file, err := os.Create("output.txt")
    if err != nil {
        panic(err)
    }
    defer file.Close()
    
    fmt.Fprint(file, "This goes to a file\n")
    fmt.Fprint(file, "Multiple ", "values ", 42, "\n")
    
    fmt.Print("Check output.txt for results\n")
}

fmt.Fprint 函数的工作方式类似于 fmt.Print,但它写入指定的 io.Writer。这种模式适用于任何写入器。

性能注意事项

为了获得高性能的打印,请在写入之前缓冲您的输出。此示例比较了不同的打印方法。

performance.go
package main

import (
    "fmt"
    "strings"
    "time"
)

func printMethod() {
    start := time.Now()
    for i := 0; i < 10000; i++ {
        fmt.Print("iteration ", i, " ")
    }
    fmt.Println("\nfmt.Print duration:", time.Since(start))
}

func builderMethod() {
    start := time.Now()
    var b strings.Builder
    for i := 0; i < 10000; i++ {
        fmt.Fprint(&b, "iteration ", i, " ")
    }
    fmt.Print(b.String())
    fmt.Println("\nstrings.Builder duration:", time.Since(start))
}

func main() {
    printMethod()
    builderMethod()
}

使用 strings.Builder 缓冲输出对于许多小写入来说更快。在性能关键的代码中,这种差异会变得很显著。

来源

Go fmt 包文档

本教程通过基本输出操作和格式化的实际示例,介绍了 Go 中的 fmt.Print 函数。

作者

我的名字是 Jan Bodnar,我是一位充满激情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。至今,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出所有 Golang 教程