【Golang】语法基础——深入解析Go语言的格式化输出

🚀本系列文章为个人学习笔记,目的是巩固知识并记录我的学习过程及理解。文笔和排版可能拙劣,望见谅。


目录

  1. 基本格式化函数

  2. 常用格式化动词

  3. 宽度和精度控制

  4. 组合使用示例在这里插入图片描述


在Golang中,格式化输出是非常常用的操作,特别是在打印调试信息或输出结果时。Golang 提供了一组强大的格式化函数,主要在 fmt 包中定义。这些函数支持多种类型和格式的输出。以下是对 Go 中各种格式化输出的详细介绍:

1. 基本格式化函数

1.1 fmt.Print

fmt.Print 直接输出内容,没有格式化。可以接受多个参数,参数之间会自动添加空格。

fmt.Print("Hello", "World") // 输出: Hello World

1.2 fmt.Println

fmt.Println 类似于 fmt.Print,但会在末尾添加一个换行符。

fmt.Println("Hello", "World") // 输出: Hello World\n

1.3 fmt.Printf

fmt.Printf 允许使用格式化动词来格式化输出,类似于 C 语言中的 printf 函数。

fmt.Printf("Name: %s, Age: %d\n", "Alice", 30) // 输出: Name: Alice, Age: 30

2. 常用格式化动词

2.1 通用动词

2.1.1 %v

按变量的默认格式输出。

fmt.Printf("%v\n", "Hello") // 输出: Hello
2.1.2 %+v

对结构体,会输出字段名和值。

type Person struct {
    Name string
    Age  int
}
fmt.Printf("%+v\n", Person{"Alice", 30}) // 输出: {Name:Alice Age:30}
2.1.3 %#v

输出 Go 语法表示形式。

fmt.Printf("%#v\n", Person{"Alice", 30}) // 输出: main.Person{Name:"Alice", Age:30}
2.1.4 %T

输出变量的类型。

fmt.Printf("%T\n", 123) // 输出: int
2.1.5 %%

输出百分号本身。

fmt.Printf("%%\n") // 输出: %

2.2 布尔型

2.2.1 %t

输出 truefalse

fmt.Printf("%t\n", true) // 输出: true

2.3 整型

2.3.1 %b

二进制表示。

fmt.Printf("%b\n", 5) // 输出: 101
2.3.2 %c

Unicode 码点对应的字符。

fmt.Printf("%c\n", 65) // 输出: A
2.3.3 %d

十进制表示。

fmt.Printf("%d\n", 123) // 输出: 123
2.3.4 %o

八进制表示。

fmt.Printf("%o\n", 123) // 输出: 173
2.3.5 %q

单引号围绕的字符字面值,使用Go语法。

fmt.Printf("%q\n", 65) // 输出: 'A'
2.3.6 %x

十六进制,小写字母。

fmt.Printf("%x\n", 255) // 输出: ff
2.3.7 %X

十六进制,大写字母。

fmt.Printf("%X\n", 255) // 输出: FF

2.4 浮点型及复数

2.4.1 %e

科学计数法,小写 e。

fmt.Printf("%e\n", 123456.789) // 输出: 1.234568e+05
2.4.2 %E

科学计数法,大写 E。

fmt.Printf("%E\n", 123456.789) // 输出: 1.234568E+05
2.4.3 %f

有小数点但无指数部分。

fmt.Printf("%f\n", 123456.789) // 输出: 123456.789000
2.4.4 %g

根据实际情况选择 %e%f 表示。

fmt.Printf("%g\n", 123456.789) // 输出: 123456.789
2.4.5 %G

根据实际情况选择 %E%f 表示。

fmt.Printf("%G\n", 123456.789) // 输出: 123456.789

2.5 字符串和字节切片

2.5.1 %s

输出字符串或字节切片。

fmt.Printf("%s\n", "Hello") // 输出: Hello
2.5.2 %q

双引号围绕的字符串字面值,使用 Go 语法。

fmt.Printf("%q\n", "Hello") // 输出: "Hello"
2.5.3 %x

每个字节用两个字符表示的十六进制。

fmt.Printf("%x\n", "Hello") // 输出: 48656c6c6f
2.5.4 %X

每个字节用两个字符表示的十六进制,大写。

fmt.Printf("%X\n", "Hello") // 输出: 48656C6C6F

2.6 指针

2.6.1 %p

指针的十六进制表示,前缀 0x

var p *int
fmt.Printf("%p\n", p) // 输出: 0x<地址>

3. 宽度和精度控制

宽度和精度控制用于调整输出格式:

  1. 宽度: 数字前的整数,用于指定最小宽度。
  2. 精度: . 后的数字,用于指定浮点数的小数位数或字符串的最大长度。

例子:

fmt.Printf("%6d\n", 123)       // 输出: '   123'
fmt.Printf("%6.2f\n", 1.2)     // 输出: '  1.20'
fmt.Printf("%.2s\n", "abcdef") // 输出: 'ab'

4. 组合使用示例

通过组合使用这些动词,可以创建复杂的格式化输出。例如:

type Point struct {
    X, Y int
}

p := Point{1, 2}
fmt.Printf("%v\n", p)   // 输出: {1 2}
fmt.Printf

("%+v\n", p)  // 输出: {X:1 Y:2}
fmt.Printf("%#v\n", p)  // 输出: main.Point{X:1, Y:2}
fmt.Printf("%T\n", p)   // 输出: main.Point
fmt.Printf("%t\n", true) // 输出: true
fmt.Printf("%d\n", 123)  // 输出: 123
fmt.Printf("%0.2f\n", 1.2345) // 输出: 1.23
  • 17
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值