admin管理员组

文章数量:1530974

目录

格式化字符串

格式化样式

%s

使用格式

格式化字符串

格式化字节数组

自定义样式

%d

使用格式

格式化整型

%b,%#b

格式化整型

%o,%#o

%x, %#x

格式化整型

格式化字符

格式化字符串

%X, %#X

%v

%+v

%#v

自定义样式

%t

%T

%%

%c

%U

%f

%e

格式化宽度

指定精度

左对齐

参数和参数列表

格式化字符与参数数量不匹配

格式化字符与参数类型不匹配


格式化字符串

由于字符串通常是有书面文本组成的,因此在许多情况下,我们可能希望更好地控制字符串的外观,以便通过标点,换行和缩进使字符串对人类更具可读性。对于一些特殊的使用场景,我们希望保存在程序中的变量值插入到字符串中,这就需要格式化字符串。Go对字符串格式化提供了良好的支持,在 Go 语言中,fmt.Sprintf,fmt.Printf,fmt.Fprintf, Log.Printf, log.Panicf 等函数常常会用到格式化字符串参数。格式化字符串本质上与普通的字符串无异,它是由普通的字符串加上格式化样式和参数组成的。下面我们就来谈谈Go语言的格式化样式。

格式化样式

格式化样式是一种字符串形式,格式化字符以%开头,加上一个表示格式化字符类型的字符串组成了格式化样式。例如, %s表示字符串格式,%d表示整数格式。详细的格式化样式表总结如下:

格式化样式 描述
%s 输出字符串(string和[]byte)值
%d 输出十进制整数值
%b 输出整型的二进制表示形式
%#b 输出整型的二进制完整表示形式
%o 输出整型的八进制表示形式
%#o 输出整型的八进制完整表示形式
%x 输出整型的十六进制表示形式
%#x 输出整型的十六进制完整表示形式
%X 输出整型的十六进制表示形式(大写)
%#X 输出整型的十六进制完整表示形式(大写)
%v 输出值的本来形式
%+v 输出值的本来形式,如果值为结构体,对结构体字段名和值展开
%#v 输出Go语法格式的值
%t 输出布尔值
%T 输出值对应的Go语言类型
%% 输出百分号(%)
%c 输出Unicode码对应的字符
%U 将Unicode码转换为对应的Unicode码点
%f 输出浮点数
%e 输出数值的科学计数法形式
%E 与%e功能相同
%g 输出紧凑的浮点数
%p 输出指针
%q 格式化字符串,在字符串的两端加上双引号

%s

使用格式

%[-][length]s
- 可选,表示左对齐
length 可选,一个大于0的整数,表示格式化宽度

格式化字符串

%s输出字符串。%s可以将string和与string具有相同底层类型的类型输出。

package main

import "fmt"

func main() {
	sentence := "I love Go."
	fmt.Printf("He say: '%s'\n", sentence)
	// output: He say: 'I love Go.'

	type S string
	fmt.Printf("He say: '%s'\n", S(sentence))
	// output: He say: 'I love Go.'
}

格式化字节数组

%s也可以输出字节切片[]byte和字节数组[...]byte。

package main

import "fmt"

func main() {
	list := []byte{97, 98, 99}
	fmt.Printf("%s\n", list)
	// output: abc

	array := [4]byte{96, 97, 98, 99}
	fmt.Printf("%s\n", array)
	// output: `abc
}

自定义样式

通过实现fmt.Stringer接口来定制类型的%s输出。下面的代码定义了一个自定义类型MyInteger,并实现了fmt.Stringer接口,返回一个字符串"funny"。因此无论该类型变量中实际存储的值是什么,%s得到的格式化字符串永远都为"funny",即fmt.Stringer接口的返回值。

package main

import "fmt"

type MyInteger int

func (i MyInteger) String() string {
	return "funny"
}

func main() {
	var demo1 MyInteger = 23
	fmt.Printf("%s\n", demo1)
	// output: funny

	var demo2 MyInteger = 298
	fmt.Printf("%s\n", demo2)
	// output: funny
}

%d

使用格式

%[+][-][length]d
+ 可选,表示右对齐。默认情况下为右对齐
- 可选,表示左对齐
length 可选,一个大于0的整数,表示格式化宽度

格式化整型

%d输出整数类型。%d可以将int, int32, int64, uint, uint8, uint16, uint32, uint64和与它们底层类型相同的类型输出。

package main

import "fmt"

func main() {
	var number int = 0
	fmt.Printf("The value of number is: %d.\n", number)
	// output: The value of number is: 0.
	
	var number32 int32 = 1
	fmt.Printf("The value of number32 is: %d.\n", number32)
	// output: The value of number32 is: 1.
	
	var number64 int64 = 2
	fmt.Printf("The value of number64 is: %d.\n", number64)
	// output: The value of number64 is: 2.
	
	var numberu uint = 3
	fmt.Printf("The value of numberu is: %d.\n", numberu)
	// output: The value of numberu is: 3.
	
	var numberu8 uint8 = 4
	fmt.Printf("

本文标签: 字符串