自学内容网 自学内容网

go语言 fmt的几个打印区别以及打印格式

一、打印Print

Go 语言的 fmt 包提供了多种打印函数,用于格式化和输出数据。以下是几个常用的 fmt 打印函数及其区别:

  • fmt.Print 和 fmt.Println
  • fmt.Printf
  • fmt.Sprint, fmt.Sprintf, 和 fmt.Sprintln
  • fmt.Fprint, fmt.Fprintf, 和 fmt.Fprintln

1.1 fmt.Print 和 fmt.Println

fmt.Print:将参数打印到标准输出,不附加任何额外的字符。
fmt.Println:将参数打印到标准输出,并在末尾附加一个换行符。
示例:

package main
import "fmt"

func main() {
    fmt.Print("Hello, ")
    fmt.Print("World!")
    // 输出: Hello, World!

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

1.2fmt.Printf

fmt.Printf:根据格式字符串格式化并打印参数。格式字符串可以包含格式动词,例如 %d 表示整数,%s 表示字符串,%v 表示默认格式等。
示例:

package main

import "fmt"

func main() {
    name := "Alice"
    age := 30
    fmt.Printf("Name: %s, Age: %d\n", name, age)
    // 输出: Name: Alice, Age: 30
}

1.3 fmt.Sprint, fmt.Sprintf, 和 fmt.Sprintln

这些函数类似于 fmt.Print, fmt.Printf, 和 fmt.Println,但它们将结果返回为字符串,而不是直接打印到标准输出。

fmt.Sprint:返回格式化后的字符串。
fmt.Sprintf:根据格式字符串返回格式化后的字符串。
fmt.Sprintln:返回格式化后的字符串,并在末尾附加一个换行符。
示例:

package main

import "fmt"

func main() {
    str := fmt.Sprint("Hello, ", "World!")
    fmt.Println(str)
    // 输出: Hello, World!

    str = fmt.Sprintf("Name: %s, Age: %d", "Alice", 30)
    fmt.Println(str)
    // 输出: Name: Alice, Age: 30

    str = fmt.Sprintln("Hello, ", "World!")
    fmt.Println(str)
    // 输出: Hello, World!
    // (注意末尾的空行)
}

1.4 fmt.Fprint, fmt.Fprintf, 和 fmt.Fprintln

这些函数类似于 fmt.Print, fmt.Printf, 和 fmt.Println,但它们将结果输出到指定的 io.Writer(例如文件或网络连接)。

fmt.Fprint:将格式化后的输出写入 io.Writer。
fmt.Fprintf:根据格式字符串将格式化后的输出写入 io.Writer。
fmt.Fprintln:将格式化后的输出写入 io.Writer,并在末尾附加一个换行符。
示例:

package main

import (
    "fmt"
    "os"
)

func main() {
    f, err := os.Create("output.txt")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer f.Close()

    fmt.Fprint(f, "Hello, ")
    fmt.Fprintln(f, "World!")
    fmt.Fprintf(f, "Name: %s, Age: %d\n", "Alice", 30)
}

上面的代码会在当前目录下创建一个名为 output.txt 的文件,并将以下内容写入其中:

Hello, World!
Name: Alice, Age: 30

总结
fmt.Print 和 fmt.Println:直接将参数打印到标准输出。
fmt.Printf:根据格式字符串格式化并打印参数到标准输出。
fmt.Sprint, fmt.Sprintf, 和 fmt.Sprintln:返回格式化后的字符串,不直接打印。
fmt.Fprint, fmt.Fprintf, 和 fmt.Fprintln:将格式化后的输出写入指定的 io.Writer。

二、打印格式

在 Go 语言的 fmt 包中,格式动词(format verbs)用于控制字符串的格式化输出。不同的格式动词可以用于不同类型的数据,提供多种显示选项。以下是一些常见的格式动词及其含义:

基本格式动词

%v:默认格式输出。
%+v:结构体字段名和值一起输出。
%#v:Go 语言语法格式输出(即,可以直接用作 Go 代码的输出)。
%T:输出值的类型。
%%:字面上的百分号。

整数类型

%b:二进制表示。
%c:相应 Unicode 码点的字符。
%d:十进制表示。
%o:八进制表示。
%O:带零前缀的八进制表示(0o123)。
%x:十六进制表示,小写字母。
%X:十六进制表示,大写字母。
%U:Unicode 格式:U+1234。
%q:单引号围绕的字符字面值,必要时会采用转义表示。

浮点数和复数类型

%b:无小数部分的科学计数法,例如 -123456p-78。
%e:科学计数法,例如 -1.234456e+78。
%E:科学计数法,例如 -1.234456E+78。
%f:有小数部分但无指数部分,例如 123.456。
%F:等价于 %f。
%g:根据实际情况采用 %e 或 %f 格式(以获得更简洁的输出)。
%G:根据实际情况采用 %E 或 %F 格式(以获得更简洁的输出)。

字符串和字节切片

%s:字符串或字节切片的输出。
%q:带双引号的字符串。
%x:每个字节用两字符十六进制表示(小写字母),如 “hex” -> “686578”。
%X:每个字节用两字符十六进制表示(大写字母)。

布尔类型

%t:true 或 false。

指针

%p:十六进制表示的指针值。
示例代码
下面是一个示例代码,演示了各种格式动词的用法:

package main

import (
    "fmt"
)

type Person struct {
    Name string
    Age  int
}

func main() {
    p := Person{Name: "Alice", Age: 30}

    fmt.Printf("默认格式: %v\n", p)
    fmt.Printf("带字段名: %+v\n", p)
    fmt.Printf("Go 语法格式: %#v\n", p)
    fmt.Printf("类型: %T\n", p)

    i := 42
    fmt.Printf("二进制: %b\n", i)
    fmt.Printf("字符: %c\n", i)
    fmt.Printf("十进制: %d\n", i)
    fmt.Printf("八进制: %o\n", i)
    fmt.Printf("十六进制: %x\n", i)
    fmt.Printf("带 Unicode: %U\n", i)
    fmt.Printf("单引号字符: %q\n", i)

    f := 3.1415926535
    fmt.Printf("科学计数法 (小写): %e\n", f)
    fmt.Printf("科学计数法 (大写): %E\n", f)
    fmt.Printf("小数部分: %f\n", f)
    fmt.Printf("根据情况使用 %%e 或 %%f: %g\n", f)

    s := "hello"
    fmt.Printf("字符串: %s\n", s)
    fmt.Printf("带引号字符串: %q\n", s)
    fmt.Printf("十六进制 (小写): %x\n", s)
    fmt.Printf("十六进制 (大写): %X\n", s)

    b := true
    fmt.Printf("布尔值: %t\n", b)

    ptr := &p
    fmt.Printf("指针: %p\n", ptr)
}

输出结果

默认格式: {Alice 30}
带字段名: {Name:Alice Age:30}
Go 语法格式: main.Person{Name:"Alice", Age:30}
类型: main.Person
二进制: 101010
字符: *
十进制: 42
八进制: 52
十六进制: 2a
带 Unicode: U+002A
单引号字符: '*'
科学计数法 (小写): 3.141593e+00
科学计数法 (大写): 3.141593E+00
小数部分: 3.141593
根据情况使用 %e 或 %f: 3.14159
字符串: hello
带引号字符串: "hello"
十六进制 (小写): 68656c6c6f
十六进制 (大写): 68656C6C6F
布尔值: true
指针: 0xc000010200

原文地址:https://blog.csdn.net/qq_43570528/article/details/140396711

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!