📜  GoLang 中的 fmt 包(1)

📅  最后修改于: 2023-12-03 15:01:01.577000             🧑  作者: Mango

GoLang 中的 fmt 包介绍

GoLang 中的 fmt 包是一个用于格式化 I/O 操作的标准库。它提供了一系列的格式化输出函数和格式化输入函数。

使用 fmt 包可以输出文本、数字、变量等各种类型的数据,并且可以根据需求自定义输出格式。同时,fmt 包还可以读取标准输入和标准错误,并提供了一组格式化输入函数,可以从标准输入读取不同类型的数据。

常用的 fmt 包函数
  • Print / Println:输出文本信息,可以使用占位符 %s,格式化输出变量值。示例代码如下:
package main

import "fmt"

func main() {
    name := "World"
    fmt.Printf("Hello, %s!\n", name)
}
  • Printf:格式化输出,支持占位符 %d%f%t%v 等常用占位符。示例代码如下:
package main

import "fmt"

func main() {
    name := "World"
    age := 18
    fmt.Printf("Hello, %s! You are %d years old.\n", name, age)
}
  • Sprintf:格式化输出,根据格式返回格式化后的字符串。示例代码如下:
package main

import "fmt"

func main() {
    name := "World"
    age := 18
    s := fmt.Sprintf("Hello, %s! You are %d years old.\n", name, age)
    fmt.Println(s)
}
  • Scanf:格式化输入,从标准输入读取数据,并使用对应的占位符格式化数据。示例代码如下:
package main

import "fmt"

func main() {
    var name string
    var age int
    fmt.Println("What's your name?")
    fmt.Scanf("%s", &name)
    fmt.Println("How old are you?")
    fmt.Scanf("%d", &age)
    fmt.Printf("Hello, %s! You are %d years old.\n", name, age)
}
  • Fprintf:格式化输出到指定的 io.Writer(如文件、网络连接)。示例代码如下:
package main

import (
    "fmt"
    "os"
)

func main() {
    name := "World"
    age := 18
    f, _ := os.Create("hello.txt")
    defer f.Close()
    fmt.Fprintf(f, "Hello, %s! You are %d years old.\n", name, age)
}
  • Errorf:格式化输出错误信息,并返回一个 error 类型值。示例代码如下:
package main

import (
    "errors"
    "fmt"
)

func main() {
    name := "World"
    if name != "Alice" {
        err := fmt.Errorf("Name %s is not allowed.", name)
        fmt.Println(err)
        return
    }
    fmt.Println("Hello, Alice!")
}
单元测试

GoLang 有一个内置的单元测试框架,可以帮助我们编写单元测试。下面是一个使用 fmt 包的单元测试示例代码:

package main

import (
    "fmt"
    "testing"
)

func TestFprintf(t *testing.T) {
    name := "World"
    age := 18
    f := &fakeWriter{}
    fmt.Fprintf(f, "Hello, %s! You are %d years old.\n", name, age)
    if f.str != "Hello, World! You are 18 years old.\n" {
        t.Errorf("Incorrect output: %s", f.str)
    }
}

type fakeWriter struct {
    str string
}

func (f *fakeWriter) Write(p []byte) (int, error) {
    f.str = string(p)
    return len(p), nil
}

在上面的示例代码中,我们编写了一个测试函数 TestFprintf,用于测试格式化输出到 fakeWriter 的情况,并使用自己编写的 fakeWriter 实现 io.Writer 接口,即可测试输出结果是否正确。

以上就是 GoLang 中的 fmt 包介绍,其中包括常见的使用方法和单元测试示例。GoLang 以其简洁、高效、易用的特点,越来越受到程序员的青睐,希望大家能够更好地运用 GoLang 来开发高性能程序。