• Golang格式化输出


    fmt

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

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

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

    格式化

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

    fmt.Sprintf(格式化样式, 参数列表…)
    
    • 1
    • 格式样式: 字符串形式,格式化符号以%开头,%s字符串格式,%d十进制的整数格式
    • 参数列表: 多个参数以逗号分隔,个数必须与格式化样式中的个数一一对应,否则运行时会报错

    比如:

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

    整数格式化

    占 位 符描 述
    %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 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    浮点数格式化

    占 位 符描 述
    %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 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    布尔类型格式化

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

    字符格式化

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

    字符串格式化

    占 位 符描 述
    %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
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    指针格式化

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

    通用占位符

    占 位 符描 述
    %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
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    宽度表示

    浮点数精度控制
    宽度通过一个紧跟在百分号后面的十进制数指定,如果未指定宽度,则表示值时除必需之外不作填充。
    精度通过(可选的)宽度后跟点号后跟的十进制数指定。如果未指定精度,会使用默认精度;如果点号后没有跟数字,表示精度为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|
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    字符串长度控制

    宽度设置格式:占位符中间加一个数字, 数字分正负, +: 右对齐, -: 左对齐
    最小宽度:百分号后紧跟十进制数,不够部分可以选择补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|
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    什么情况下使用微服务?
    Google Earth Engine ——常用简单的简写和全程
    字符串|459.重复的子字符串
    MATLAB----矩阵处理
    Servlet注册迭代史
    跑步耳机哪款好用,五款适合跑步的排行榜
    【JVM】运行时数据区之 堆——自问自答
    使用 Velocity 模板引擎的 Spring Boot 应用
    WebGPU-初识各名词概念Adapters与Device
    从零实现深度学习框架——Transformer从菜鸟到高手(一)
  • 原文地址:https://blog.csdn.net/shn111/article/details/127877743