Go中标准库fmt包的使用小结

Written by

in

文章目录
  • 格式化字符串使用%开头的动词指定数据类型:
  • 在动词前添加修饰符实现精细控制:
  • 所有函数返回写入字节数和错误(如扫描时类型不匹配): n, err := fmt.Printf(“%d”, “not-a-number”) if err != nil { log.Fatal(err) // 报错: %!d(string=not-a-number) }
  • 目录
    • 一、核心功能分类
      • 1.输出函数(标准输出)
      • 2.字符串格式化
      • 3. 输出到指定目标(io.Writer)
      • 4. 输入扫描(标准输入/字符串/文件)
    • 二、格式化动词(Verbs)详情
      • 1. 通用动词
      • 2. 整数类型
      • 3. 浮点数
      • 4. 字符串与字节切片
      • 5. 指针与地址
    • 三、高级格式控制
      • 1.宽度与精度
      • 2. 自定义格式(实现接口)
    • 四、错误处理
      • 五、表格总结
        • 输出函数
        • 输入函数
        • 通用占位符
        • 整数类型
        • 浮点数和复数
        • 字符串和字节切片

      fmt包是Go语言中用于格式化输入/输出的核心标准库,提供了丰富的函数来处理字符串格式化,打印和扫描。官方文档参考:pkg.go.dev/fmt

      • Print 系列:
        • Print(): 输出内容(无格式)
        • Println(): 输出内容并添加换行符
        • Printf(): 格式化输出(核心函数)
        // 使用 Print 函数,直接输出内容,不会自动换行
        fmt.Print("Hello, ")
        fmt.Print("World!n")
      
        // 使用 Println 函数,输出内容后自动换行
        fmt.Println("This is a new line.")
      
        // 使用 Printf 函数,根据格式化字符串输出内容
        name := "Alice"
        age := 30
        fmt.Printf("My name is %s and I am %d years old.n", name, age)

      • Sprint 系列:返回格式化后的字符串
        • Sprintf(): 格式化并返回字符串
       // 使用 Sprint 函数,将参数格式化为字符串并返回
        str := fmt.Sprint("This is a ", "concatenated string.")
        fmt.Println(str)
      
        // 使用 Sprintln 函数,将参数格式化为字符串并返回,参数间用空格分隔,结尾添加换行符
        strLn := fmt.Sprintln("This", "is", "a", "Sprintln example.")
        fmt.Print(strLn)
      
        // 使用 Sprintf 函数,根据格式化字符串将参数格式化为字符串并返回
        formattedStr := fmt.Sprintf("The sum of %d and %d is %d.", 3, 5, 3+5)
        fmt.Println(formattedStr)

      • Fprint 系列:写入到文件/网络等
        • Fprintf(): 格式化并写入
      // 使用 Fprint 函数,将内容输出到指定的 io.Writer,这里使用标准输出 os.Stdout
        // 一般用于将内容输出到文件等其他 io.Writer 中
        fmt.Fprint(os.Stdout, "Output using Fprint.n")
      
        // 使用 Fprintln 函数,将内容输出到指定的 io.Writer 并换行
        fmt.Fprintln(os.Stdout, "Output using Fprintln.")
      
        // 使用 Fprintf 函数,根据格式化字符串将内容输出到指定的 io.Writer
        fmt.Fprintf(os.Stdout, "My name is %s and I am %d years old, using Fprintf.n", name, age)

      • Scan 系列:
        • Scan(): 读取空格分隔的值
        • Scanf(): 格式化扫描(按模式解析)
         var name string
          var age int
          fmt.Scanf("%s %d", &name, &age) // 输入: "Bob 25"
      • Sscan(): 从字符串扫描
       input := "ID:100"
          var id int
          fmt.Sscan(input[4:], &id) // id = 100

      格式化字符串使用%开头的动词指定数据类型:

      • %v:默认格式(自动推断类型)
        fmt.Printf("%v %v", "hello", 42) // "hello 42"
      • %+v:打印结构体时包含字段名
        fmt.Printf("%+v", User{Name: "Tom"}) // "{Name:Tom}"
      • %#v:Go语法表示
        fmt.Printf("%#v", "hi") // `"hi"`
      • %T:输出类型
        fmt.Printf("%T", 3.14) // "float64"

      • %d:十进制
      • %b:二进制
      • %x:十六进制(小写)
      • %o:八进制
      • %c:Unicode字符
        fmt.Printf("%d → %x → %c", 65, 65, 65) // "65 → 41 → A"

      • %f:小数形式(默认精度6)
      • %e:科学计数法(e小写)
      • %g:自动选择 %f 或 %e(更紧凑)
        fmt.Printf("%.2f | %e", 3.14159, 1000.0) // "3.14 | 1.000000e+03"

      • %s:直接输出字符串/字节切片
      • %q:带引号的转义字符串
        fmt.Printf("%q", "Got") // ""Go\t""

      • %p:指针地址
        x := 10
        fmt.Printf("%p", &x) // "0xc0000160d8"

      在动词前添加修饰符实现精细控制:

      • %5d:最小宽度5(右对齐)
      • %-5d:左对齐
      • %05d:补零填充
      • %.3f:浮点数保留3位小数
        fmt.Printf("|%6s|%-6d|%06d|", "Hi", 42, 42)
        // 输出: |    Hi|42    |000042|

      若类型实现了 StringerFormatter 接口,可自定义输出:

      type User struct{ Name string }
      func (u User) String() string { return "[" + u.Name + "]" }
      
      fmt.Print(User{"Alice"}) // 输出: [Alice]

      • 所有函数返回写入字节数和错误(如扫描时类型不匹配):
       n, err := fmt.Printf("%d", "not-a-number")
        if err != nil {
            log.Fatal(err) // 报错: %!d(string=not-a-number)
        }

      函数 描述 示例
      Print() 原样输出内容,不加换行符 fmt.Print("Hello")
      Println() 输出内容并在末尾添加换行符 fmt.Println("World")
      Printf() 格式化输出 fmt.Printf("%d", 42)
      Sprint() 返回格式化后的字符串 s := fmt.Sprint(42)
      Fprint() 将内容写入到io.Writer接口 fmt.Fprint(w, "data")
      Errorf() 格式化错误信息 fmt.Errorf("error")

      函数 描述 示例
      Scan() 从标准输入读取值 fmt.Scan(&name)
      Scanf() 按格式从标准输入读取值 fmt.Scanf("%s", &name)
      Scanln() 从标准输入读取一行 fmt.Scanln(&name)
      Sscan() 从字符串中扫描值 fmt.Sscan(str, &val)
      Fscan() 从io.Reader读取值 fmt.Fscan(r, &val)

      占位符 描述 示例
      %v 值的默认格式表示 fmt.Printf("%v", data)
      %+v 添加字段名(结构体) fmt.Printf("%+v", user)
      %#v Go语法表示 fmt.Printf("%#v", arr)
      %T 值类型的Go表示 fmt.Printf("%T", 42)
      %% 百分号字面量 fmt.Printf("%%")

      占位符 描述 示例
      %b 二进制 fmt.Printf("%b", 5) → 101
      %d 十进制 fmt.Printf("%d", 42)
      %o 八进制 fmt.Printf("%o", 8) → 10
      %x 十六进制(小写) fmt.Printf("%x", 255) → ff
      %X 十六进制(大写) fmt.Printf("%X", 255) → FF
      %c Unicode码点对应字符 fmt.Printf("%c", 65) → A
      %U Unicode格式 fmt.Printf("%U", 'A') → U+0041

      占位符 描述 示例
      %f 浮点数(默认宽度、精度) fmt.Printf("%f", 3.14)
      %e 科学计数法(e) fmt.Printf("%e", 1000.0) → 1.000000e+03
      %E 科学计数法(E) fmt.Printf("%E", 1000.0) → 1.000000E+03
      %g 根据情况选择%e或%f fmt.Printf("%g", 10000000.0) → 1e+07
      %G 根据情况选择%E或%f fmt.Printf("%G", 10000000.0) → 1E+07

      占位符 描述 示例
      %s 字符串或切片 fmt.Printf("%s", "hello")
      %q 双引号包裹的字符串 fmt.Printf("%q", "hi") → "hi"
      %x 十六进制(小写) fmt.Printf("%x", "Go") → 476f
      %X 十六进制(大写) fmt.Printf("%X", "Go") → 476F

      到此这篇关于Go中标准库fmt包的使用小结的文章就介绍到这了,更多相关Go fmt包内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

      您可能感兴趣的文章:

      • Go fmt包中Scan获取标准输入方式
      • Go语言fmt包的具体使用
      • 浅析Go语言中的缓冲区及其在fmt包中的应用
      • go语言标准库fmt包的一键入门

      站内搜索