Go标准库深入学习:fmt包

Go标准库深入学习:fmt包

fmt包是Go语言中最基础和常用的标准库之一,提供了格式化输入输出的功能。本文将深入探讨fmt包的各种用法和特性。

基本输出函数

fmt包提供了三个主要的输出函数:

func Print(a ...interface{}) (n int, err error)    // 输出到标准输出,不换行
func Println(a ...interface{}) (n int, err error)  // 输出到标准输出并换行
func Printf(format string, a ...interface{}) (n int, err error) // 格式化输出

格式化输出

Printf函数使用格式化动词(verbs)指定输出格式:

package main

import "fmt"

func main() {
    // 基本格式化
    fmt.Printf("Hello %s\n", "World")  // 字符串
    fmt.Printf("%d\n", 123)            // 整数
    fmt.Printf("%f\n", 78.9)           // 浮点数

    // 特殊格式化
    fmt.Printf("%t\n", true)           // 布尔值
    fmt.Printf("%p\n", &struct{}{})    // 指针
    fmt.Printf("%c\n", 65)             // Unicode编码对应的字符
}

常用格式化动词

动词 说明
%v 值的默认格式
%+v 类似%v,但输出结构体时会添加字段名
%#v Go语法表示的值
%T 值的类型的Go语法表示
%% 百分号

输入函数

fmt包也提供了输入函数:

func Scan(a ...interface{}) (n int, err error)            // 从标准输入读取
func Scanf(format string, a ...interface{}) (n int, err error) // 格式化读取
func Scanln(a ...interface{}) (n int, err error)          // 类似Scan,但遇到换行停止

字符串格式化

除了输出到标准输出,fmt包还可以格式化字符串到变量:

func Sprintf(format string, a ...interface{}) string             // 返回格式化字符串
func Sprint(a ...interface{}) string                             // 返回连接后的字符串
func Sprintln(a ...interface{}) string                           // 返回连接后的字符串并添加换行符

错误格式化

fmt包提供了创建格式化错误信息的便利函数:

func Errorf(format string, a ...interface{}) error

示例代码

package main

import (
    "fmt"
    "os"
)

type Point struct {
    X, Y int
}

func main() {
    p := Point{1, 2}

    // 不同的格式化输出
    fmt.Printf("%v\n", p)   // {1 2}
    fmt.Printf("%+v\n", p)  // {X:1 Y:2}
    fmt.Printf("%#v\n", p)  // main.Point{X:1, Y:2}

    // 字符串格式化
    s := fmt.Sprintf("a %s", "string")
    fmt.Println(s)

    // 格式化的错误
    err := fmt.Errorf("an %s", "error")
    fmt.Println(err)

    // 写入到io.Writer
    fmt.Fprintf(os.Stderr, "an %s\n", "error")
}

高级用法

宽度和精度控制

fmt.Printf("|%6d|%6d|\n", 12, 345)       // |    12|   345|
fmt.Printf("|%6.2f|%6.2f|\n", 1.2, 3.45) // |  1.20|  3.45|
fmt.Printf("|%-6.2f|%-6.2f|\n", 1.2, 3.45) // |1.20  |3.45  |

自定义类型的格式化

可以通过实现fmt包中的接口来自定义类型的格式化输出:

type Person struct {
    Name string
    Age  int
}

func (p Person) String() string {
    return fmt.Sprintf("%v (%v years)", p.Name, p.Age)
}

func main() {
    a := Person{"Arthur Dent", 42}
    fmt.Println(a) // Arthur Dent (42 years)
}

性能考虑

当需要高性能的字符串拼接时,fmt.Sprintf可能不是最佳选择,可以考虑使用strings.Builder或bytes.Buffer。

总结

fmt包提供了强大的格式化输入输出功能,是Go编程中不可或缺的部分。掌握fmt包的各种格式化和输入输出方法,可以大大提高开发效率。

文末预告:Go标准库深入学习:strings包

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇