fmt 格式化输入输出

Go语言的fmt包用于格式化输入和输出,类似C语言的printfscanf。它是Go标准库中的常用包之一,通常用于在控制台程序中输入和输出内容。这篇笔记我们简单介绍一下fmt包的使用。

输出文本

fmt.Println()函数用于输出一行文本,该函数会自动在输出的末尾附加换行符。

package main

import (
    "fmt"
)

func main() {
    fmt.Println("Hello, world!")
}

除此之外,fmt.Print()也能输出一行文本,但不会附加换行符。

格式化输出

fmt.Printf()用于格式化输出,我们可以使用占位符来组装输出格式。

package main

import (
    "fmt"
)

func main() {
    value := 3
    fmt.Printf("Value is %v\n", value)
}

常用的占位符包括:

  • %d:十进制整数
  • %b:二进制整数
  • %o:八进制整数
  • %x:十六进制整数,使用a-f
  • %X:十六进制整数,使用A-F
  • %c:Unicode码点对应的字符
  • %U:Unicode格式,形如U+1234
  • %f:浮点数,也可以使用类似%.2f的形式指定小数点后的保留位数
  • %e:科学计数法,例如-1234.456e+78
  • %E:科学计数法,但使用大写E,例如-1234.456E+78
  • %t:布尔值,truefalse
  • %s:字符串
  • %p:指针,使用十六进制表示
  • %v:值的默认格式,支持多种类型,如果是结构体类型则内部字段值也会显示出来
  • %+v:类似%v,但结构体字段名会显示出来
  • %T:值类型

如果不确定该用什么占位符,用%v就行了。

输入到变量

fmt.Scanln()函数可以读取若干个参数到变量,多个变量使用空格分隔,使用换行结束输入,返回值n是读入的变量个数。

package main

import (
    "fmt"
)

func main() {
    var str0 string
    var str1 string
    n, err := fmt.Scanln(&str0, &str1)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Printf("Input: %v %v Number of items scanned: %v\n", str0, str1, n)
}

格式化输入

类似格式化输出,fmt.Scanf()能够实现格式化输入,我们需要使用占位符来匹配输入的值。

package main

import (
    "fmt"
)

func main() {
    var str0 string
    var str1 string
    n, err := fmt.Scanf("Input %v %v", &str0, &str1)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Printf("Input: %v %v Number of items scanned: %v\n", str0, str1, n)
}

上面代码中,如果我们输入Input 1 2,程序将能成功读入两个变量。

关于fmt和日志包

实际开发中,我们可能需要向控制台输出一些日志信息,有时图方便就会使用fmt来实现,但实际上这不是一种最佳实践。

fmt包仅用于格式化输入输出,它并不是为日志记录而设计的,日志功能还包含日志级别、输出格式(文本日志还是结构化日志)、输出形式(文件还是控制台)等一系列功能,这些功能都是fmt不具备的。Go语言标准库有logslog这两个包来专门输出日志,此外也有zaplogrus等第三方日志包,我们应该使用这些包来实现日志功能,而不是使用fmt

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap