目录
一.Go格式化输出类型
Go语言fmt包的格式化输出类型:
类型 | 说明 |
---|---|
%d | int变量 |
%x,%o,%b | 十六进制、八进制、二进制的int变量 |
%f,%g,%e | 单精度浮点型、双精度浮点型、科学计数法表示 |
%t | 布尔变量,true或false |
%c | rune(unicode标点),Go语言特有的unicode字符类型 |
%s | 字符串 |
%q | 带双引号的字符串或单引号的rune |
%v | 会将任意变量以易读的形式输出 |
%T | 打印变量类型 |
%% | 字符型百分比类型(%字符本身,类似C中的\\转义) |
二.Go中rune类型说明
rune在官方说明中是int32的别名,是一种数据类型。他是go语言内在处理字符串及其便捷的字符单位。它会自动按照字符独立的单位去处理方便我们在遍历过程中按照我们想要的方式去遍历。
这样说还是很不清晰,通过一个场景说明更容易理解:
s := "中国人,Chinese"
这样声明一个字符串,这个字符串占用多少字节空间?
由于Golang默认使用的编码格式是UTF-8格式的,UTF-8使用8位来表示一个字节。而汉字使用unicode编码格式来存放,通过占据好几个字节。我们可以通过一些unicode编码表的查询网站查询每个汉字对应的utf-8的编码。如图:
可以发现汉字的UTF-8的编码的确需要3个字节。因此"中国人,Chinese"这个字符串总的长度为:17。
那么如何统计字符串中有多少字符,用rune就可以做到。对于中英文混合的字符串,通过将字符串转换为rune数组,从而将在UTF-8下中单个英文字符占用空间不一致的问题解决,可以统计出字符串有多少字符:
r := []rune(string)
fmt.Printf("len of rune:%d\n",len(r))
这种情况下输出为"len of rune:11"
三.实例展示
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
intVar := 100
floatVar := 3.141593653
boolVar := true
stringVar := "中国人,Chinese"
runeVar := []rune(stringVar)
fmt.Printf("int format:Dec:%d,Hex:%x,Oct:%o,Bin:%b\n", intVar, intVar, intVar, intVar)
fmt.Printf("float format:float:%f,double:%g,scieitific:%e\n", floatVar, floatVar, floatVar)
fmt.Printf("boolen format:%t\n", boolVar)
fmt.Printf("string format:format1:%s,len of total:%d\n", stringVar, len(stringVar))
fmt.Printf("string format:%q\n", stringVar)
fmt.Printf("rune format:%c,formatlen of rune:%d\n", runeVar, len(runeVar))
fmt.Printf("rune format with single char:%q\n", runeVar)
fmt.Printf("rune format:len of rune by utf8:%d\n", utf8.RuneCountInString(stringVar))
fmt.Printf("format v:int:%v,boolen:%v,string:%v\n", intVar, boolVar, stringVar)
fmt.Printf("format T:int:%T,boolen:%T,string:%T\n",intVar,boolVar,stringVar)
}
输出结果:
int format:Dec:100,Hex:64,Oct:144,Bin:1100100
float format:float:3.141594,double:3.141593653,scieitific:3.141594e+00
boolen format:true
string format:format1:中国人,Chinese,len of total:17
string format:"中国人,Chinese"
rune format:[中 国 人 , C h i n e s e],formatlen of rune:11
rune format with single char:['中' '国' '人' ',' 'C' 'h' 'i' 'n' 'e' 's' 'e']
rune format:len of rune by utf8:11
format v:int:100,boolen:true,string:中国人,Chinese
format T:int:int,boolen:bool,string:string
参考文献:The Go Programming Language