写点什么

一文掌握 Go fmt 标准库常用方法的使用

作者:陈明勇
  • 2023-04-18
    江苏
  • 本文字数:2284 字

    阅读完需:约 7 分钟

一文掌握 Go fmt 标准库常用方法的使用

作者:陈明勇

专注分享后端知识,如果本文对你有帮助,不妨点个赞,如果你是 Go 语言初学者,不妨点个关注,一起成长一起进步,如果本文有错误的地方,欢迎指出!

前言

Go 语言中的 fmt 标准库是用于格式化输入和输出的库。它提供了一组函数,可以对标准输出、标准错误输出和字符串进行格式化输出。本文将对其常用方法进行介绍。

占位符

通过占位符,可以指定格式进行输入或输出,以下为 fmt 标准库里的占位符:

  • 普通占位符

  • 布尔


  • 整数

  • 浮点数

  • 字符串和字节切片

  • 切片


  • 指针

fmt 输出函数

Fprint、Fprintf、Fprintln

import (    "fmt"    "os")
func main() { file, err := os.OpenFile("./test.txt", os.O_WRONLY, 0666) if err != nil { return } defer file.Close()
fmt.Fprint(file, "123") fmt.Fprintln(file, "456") fmt.Fprintf(file, "%d", 789)}
复制代码

打开 test.txt 文件,通过 Fprint 函数先将 123 写入到文件里;

然后通过 Fprintln 函数将 456 写入到文件里并换行;

最后通过 Fprintf 函数将 789 格式化输出到文件里。

程序运行后文件的内容为:

123456789
复制代码

Print、Printf、Println

import (    "fmt")
func main() { fmt.Print("Hello, ") fmt.Println("World!") s := "golang!" fmt.Printf("Hello, %s", s)}
复制代码

首先通过 Print 函数打印 Hello,;

然后通过 Println 函数打印 Wrold! 并换行,与上面打印的语句连起来,一行的打印内容为 Hello, World!;

最后通过 Printf 函数,进行格式化打印。

最终的打印结果为:

Hello, World!Hello, golang!
复制代码

Sprint、Sprintf、Sprintln

import (    "fmt")
func main() { s1 := fmt.Sprint("hello, world!") fmt.Printf("%#v\n", s1) s2 := fmt.Sprintln("hello, gopher!") fmt.Printf("%#v\n", s2) name := "小明" s3 := fmt.Sprintf("hello, %s", name) fmt.Printf("%#v\n", s3)}
复制代码

通过 Sprint 将指定内容转成默认格式的字符串并用变量 s1 接收,通过占位符 %#v 打印出 s1 的原生内容 → "hello, world!"

通过 Sprintln 将指定内容转成默认格式的字符串并添加换行符,用变量 s2 接收,通过占位符 %#v 打印出 s2 的原生内容 → "hello, gopher!\n"

通过 Sprintf 将指定内容转成指定格式的字符串并用变量 s3 接收,通过占位符 %#v 打印出 s3 的原生内容 → "hello, 小明"

fmt 输入函数


Fscan、Fscanf、Fscanln

  • Fscan

func main() {    file, err := os.Open("./test.txt")    if err != nil {	return    }    defer file.Close()    var num1, num2 int    _, err = fmt.Fscan(file, &num1, &num2)    if err != nil {    	return    }    fmt.Println(num1, num2) // 123 456}
复制代码


  • ./test.txt 的内容为:123 456

  • Fscan 函数通过空格或换行符分隔内容并赋值给变量,因此使用 num1 和 num2 变量接收分隔后的内容 123 456

  • 必须将 num1 和 num2 的地址传递进去,而不是值传递。

  • Fscanf

import (    "fmt"    "os")
func main() { file, err := os.Open("./test.txt") if err != nil { return } defer file.Close() var num1, num2 int _, err = fmt.Fscanf(file, "%d%d", &num1, &num2) if err != nil { return } fmt.Println(num1, num2) // 123 456}
复制代码


通过占位符 %d,将文件里的内容赋值给 num1 和 num2 变量。

  • Fscanln

import (    "fmt"    "os")
func main() { file, err := os.Open("./test.txt") if err != nil { return } defer file.Close() var num1, num2 int _, err = fmt.Fscanln(file, &num1, &num2) if err != nil { return } fmt.Println(num1, num2) // 123 456}
复制代码


Fscanln 与 Fscan 类似,但是遇到换行符停止扫描,如果所扫描到的内容数量与变量数量不一致,将会返回 error

Scan、Scanf、Scanln

  • Scan

  import "fmt"    func main() {      var name string      fmt.Println("请输入你的姓名:")      fmt.Scan(&name)      fmt.Println(name) // 小明  }
复制代码

运行结果:

    请输入你的姓名:    小明    小明
复制代码

使用 name 变量接收输入的值

  • Scanf

  import "fmt"    func main() {      var name string      var age int      fmt.Println("请输入你的姓名和性别:")      fmt.Scanf("%s%d", &name, &age)      fmt.Println(name, age) // 小明  }
复制代码

运行结果:

  请输入你的姓名和性别:  小明 18  小明 18
复制代码


使用占位符 %s 和 %d 分别指定将字符串和整型的数据赋值给 name 和 age

  • Scanln

  import "fmt"    func main() {        var name string        fmt.Println("请输入你的姓名:")        fmt.Scanln(&name)        fmt.Println(name) // 小明  }
复制代码

Scan 是类似的,只不过它遇到换行符后就停止扫描。

Sscan、Sscanf、Sscanln

import "fmt"
func main() { var name string var age int fmt.Sscan("小明 20", &name, &age) fmt.Println(name, age) // 小明 20
fmt.Sscanf("小红 18", "%s%d", &name, &age) fmt.Println(name, age) // 小红 18
fmt.Sscanln("小刚 21", &name, &age) fmt.Println(name, age) // 小刚 21}
复制代码


这三个输入函数和上面介绍的类似,只不过这三个是从字符串里面读取的内容。

小结

本文首先按分类介绍占位符的基本用法,然后对 fmt 标准库的常用输出函数进行了介绍并给出了示例;最后对 fmt 标准库的常用输入函数进行了介绍。


日常开发中,fmt 库是最常用的,我们应熟悉其常用的方法。

发布于: 2023-04-18阅读数: 19
用户头像

陈明勇

关注

一个热爱技术,喜欢专研技术的程序员。 2021-10-20 加入

公众号:Go技术干货

评论

发布
暂无评论
一文掌握 Go fmt 标准库常用方法的使用_Go_陈明勇_InfoQ写作社区