深入了解Golang中的格式化输出

 更新时间:2022年11月18日 15:41:45   作者:PolarDay.  
fmt是Go语言中用于控制文本输出的常用标准库,文中将通过示例详细讲解一下Go语言中不同形式的格式化输出,感兴趣的小伙伴可以了解一下

fmt

Go语言用于控制文本输出常用的标准库是fmt

fmt中主要用于输出的函数有:

  • Print: 输出到控制台,不接受任何格式化操作
  • Println: 输出到控制台并换行
  • Printf: 格式化输出,只可以打印出格式化的字符串,只可以直接输出字符串类型的变量(不可以直接输出别的类型)
  • Sprintf: 格式化并返回一个字符串而不带任何输出
  • Fprintf: 来格式化并输出到io.Writers而不是os.Stdout

格式化

通过Printf函数来测试下Go语言里面的字符串格式化:

fmt.Sprintf(格式化样式, 参数列表…)

格式样式: 字符串形式,格式化符号以%开头,%s字符串格式,%d十进制的整数格式

参数列表: 多个参数以逗号分隔,个数必须与格式化样式中的个数一一对应,否则运行时会报错

比如:

username := "boy"
fmt.Printf("welcome, %s", username)

整数格式化

占 位 符描 述
%b整数以二进制方式显示
%o整数以八进制方式显示
%d整数以十进制方式显示
%x整数以十六进制方式显示
%X整数以十六进制、字母大写方式显示
%c相应Unicode码点所表示的字符
%UUnicode字符,Unicode格式:123,等同于“U+007B”
func main() {
    fmt.Printf("%b \n", 123) //1111011
    fmt.Printf("%o \n", 123) //173
    fmt.Printf("%d \n", 123) //123
    fmt.Printf("%x \n", 123) //7b
    fmt.Printf("%X \n", 123) //7B   
    fmt.Printf("%c \n", 123) //{
    fmt.Printf("%U \n", 123) //U+007B 
}

浮点数格式化

占 位 符描 述
%e科学计数法,例如 1.234560e+02
%E科学计数法,例如 1.234560E+02
%f有小数点而无指数,例如 123.456
%F等价于%f
%g根据情况选择 %e 或 %f 以产生更紧凑的(无末尾的0)输出
%G根据情况选择 %E 或 %F 以产生更紧凑的(无末尾的0)输出
func main() {
    fmt.Printf("%e \n", 123.456) //1.234560e+02
    fmt.Printf("%E \n", 123.456) //1.234560E+02
    fmt.Printf("%f \n", 123.456) //123.456000
    fmt.Printf("%F \n", 123.456) //123.456000
    fmt.Printf("%g \n", 123.456) //123.456
    fmt.Printf("%G \n", 123.456) //123.456 
}

布尔类型格式化

占 位 符描 述
%ttrue 或 false
func main() {
    fmt.Printf("%t", true) //true
}

字符格式化

占 位 符描 述
%c相应Unicode码点所表示的字符
func main() {
    fmt.Printf("%c", 0x4E2D) //中
}

字符串格式化

占 位 符描 述
%s直接输出字符串或者[]byte
%q双引号围绕的字符串,由Go语法安全地转义
%x每个字节用两字符十六进制数表示(使用a-f)
%X每个字节用两字符十六进制数表示(使用A-F)
func main() {
    fmt.Printf("%s \n", "Hello world") //Hello world
    fmt.Printf("%q \n", "Hello world") //"Hello world"
    fmt.Printf("%x \n", "Hello world") //48656c6c6f20776f726c64
    fmt.Printf("%X \n", "Hello world") //48656C6C6F20776F726C64
}

指针格式化

占 位 符描 述
%p表示为十六进制,并加上前导的0x
%#p表示为十六进制,没有前导的0x
func main() {
    a := "Hello world"
    b := &a
    fmt.Printf("%p \n", b)  //0xc000046230
    fmt.Printf("%#p \n", b) //c000046230
}

通用占位符

占 位 符描 述
%v值的默认格式
%+v类似%v,但输出结构体时会添加字段名
%#v相应值的Go语法表示
%T相应值的类型的Go语法表示
%%百分号,字面上的%,非占位符含义
func main() {
    fmt.Printf("%v \n", "Hello World")   //Hello World
    fmt.Printf("%+v \n", "Hello World")  //Hello World
    fmt.Printf("%#v \n", "Hello World")  //"Hello World"
    fmt.Printf("%T \n", "Hello World")   //string
    fmt.Printf("%%%v \n", "Hello World") //%Hello World
}

宽度表示

浮点数精度控制

宽度通过一个紧跟在百分号后面的十进制数指定,如果未指定宽度,则表示值时除必需之外不作填充。

精度通过(可选的)宽度后跟点号后跟的十进制数指定。如果未指定精度,会使用默认精度;如果点号后没有跟数字,表示精度为0。举例如下

func main() {
    fmt.Printf("|%f|\n", 123.456)     //|123.456000|
    fmt.Printf("|%12f|\n", 123.456)   //|  123.456000|
    fmt.Printf("|%.3f|\n", 123.456)   //|123.456|
    fmt.Printf("|%12.3f|\n", 123.456) //|     123.456|
    fmt.Printf("|%12.f|\n", 123.456)  //|         123|
}

字符串长度控制

宽度设置格式:占位符中间加一个数字, 数字分正负, +: 右对齐, -: 左对齐

最小宽度:百分号后紧跟十进制数,不够部分可以选择补0

最大宽度:小数点后的十进制数,超出的部分会被截断

func main() {
    fmt.Printf("|%s|\n", "123.456")    //|123.456|
    fmt.Printf("|%12s|\n", "123.456")  //|     123.456|
    fmt.Printf("|%-12s|\n", "123.456") //|123.456     |
    fmt.Printf("|%012s|\n", "123.456") //|00000123.456|
    fmt.Printf("|%.5s|\n", "123.456")  //|123.4|
}

到此这篇关于深入了解Golang中的格式化输出的文章就介绍到这了,更多相关Golang格式化输出内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go调度器学习之协作与抢占详解

    Go调度器学习之协作与抢占详解

    如果某个G执行时间过长,其他的G如何才能被正常调度,这就引出了接下来的话题:协作与抢占。本文将通过一些示例为大家详细讲讲调度器中协作与抢占的相关知识,需要的可以参考一下
    2023-04-04
  • 使用自定义错误码拦截grpc内部状态码问题

    使用自定义错误码拦截grpc内部状态码问题

    这篇文章主要介绍了使用自定义错误码拦截grpc内部状态码问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • GO语言实现AES-CFB加密的操作方法

    GO语言实现AES-CFB加密的操作方法

    本文介绍了如何用Go语言实现AES-CFB加密和解密,首先,定义一个属于encrypt包的文件,使用AES算法、CFB模式和Base64编码等功能,在加密函数中,接收明文和密钥,生成一个AES块密码和一个随机的初始化向量,实现明文的加密
    2024-10-10
  • Golang 语言极简类型转换库cast的使用详解

    Golang 语言极简类型转换库cast的使用详解

    本文我们通过 cast.ToString() 函数的使用,简单介绍了cast 的使用方法,除此之外,它还支持很多其他类型,在这没有多多介绍,对Golang 类型转换库 cast相关知识感兴趣的朋友一起看看吧
    2021-11-11
  • Go存储基础使用direct io方法实例

    Go存储基础使用direct io方法实例

    这篇文章主要介绍了Go存储基础之如何使用direct io方法实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • Go命令行参数解析flag 包使用示例详解

    Go命令行参数解析flag 包使用示例详解

    这篇文章主要介绍了Go命令行参数解析flag 包使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-01-01
  • Golang之defer 延迟调用操作

    Golang之defer 延迟调用操作

    这篇文章主要介绍了Golang之defer 延迟调用操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Go语言并发爬虫的具体实现

    Go语言并发爬虫的具体实现

    本文主要介绍了Go语言并发爬虫的具体实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • 一文带你深入理解Go语言中的sync.Cond

    一文带你深入理解Go语言中的sync.Cond

    sync.Cond 表示的是条件变量,它是一种同步机制,用来协调多个 goroutine 之间的同步。本文将通过示例为大家介绍Go语言中sync.Cond的使用,需要的可以参考一下
    2023-01-01
  • golang-redis之sorted set类型操作详解

    golang-redis之sorted set类型操作详解

    这篇文章主要介绍了golang-redis之sorted set类型操作详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12

最新评论