Go 語言中 20 個(gè)占位符的整理
一、概念
什么是占位符?你就從表面意思理解,就是占位置,只不過有很多不同種類的位置,而且這個(gè)位置不是誰都能坐,是有要求的,在程序?qū)用嬗糜诟袷交瘮?shù)據(jù)。
二、哪些函數(shù)支持
在 Go
語言中,標(biāo)準(zhǔn)包 fmt
有好多格式化的工具函數(shù),函數(shù)名末尾通常以 f
結(jié)尾,列舉如下:
fmt.Printf
格式化字符串并打印到終端(標(biāo)準(zhǔn)輸出)。fmt.Sprintf
格式化字符串并返回。fmt.Sscanf
從字符串中解析占位符的對(duì)應(yīng)位置數(shù)據(jù)。fmt.Fscanf
從io.Reader
類型中讀取數(shù)據(jù)并解析占位符的對(duì)應(yīng)位置數(shù)據(jù),用于讀取文件、終端(標(biāo)準(zhǔn)輸入)。fmt.Fprintf
將格式化的字符串?dāng)?shù)據(jù)輸出到io.Writer
類型中,用于輸出到文件。fmt.Errorf
格式化方式創(chuàng)建一個(gè)錯(cuò)誤類型消息。
這塊沒有重點(diǎn)展開講解各個(gè)函數(shù),只是簡單羅列下,如果還不明白自行查一下,也可以問我。
下來看看本篇的重點(diǎn)...
三、占位符使用
占位符需要使用 %
符號(hào)表示,簡單展示一個(gè)。
s := fmt.Sprintf("%s真帥", "老苗") fmt.Println(s) // 輸出 老苗真帥
%s
標(biāo)示字符串,將"老苗"字符串填充到 %s 位置。下來看看到底有哪些占位符?
四、普通占位符
先創(chuàng)建一個(gè)數(shù)據(jù),作為打印的對(duì)象。
type Example struct { Content string } var data = Example{Content: "例子"}
1. %v、%+v、%#v
%v:獲取數(shù)據(jù)的值,如果實(shí)現(xiàn)了 error
接口,僅表示錯(cuò)誤消息。
fmt.Printf("%v", data) // 輸出 {例子} fmt.Printf("%v", errors.New("我錯(cuò)了")) // 輸出 我錯(cuò)了
%+v:獲取數(shù)據(jù)的值,如果結(jié)構(gòu)體,會(huì)攜帶字段名。
fmt.Printf("%+v", data) // 輸出 {Content:例子}
%#v:獲取數(shù)據(jù)的值,如果是結(jié)構(gòu)體,會(huì)攜帶結(jié)構(gòu)體名和字段名。
fmt.Printf("%#v", data) // 輸出 main.Example{Content:"例子"}
2. %T
獲取數(shù)據(jù)類型
fmt.Printf("%T", data) // 輸出 main.Example
3. %%
字面上的一個(gè)百分號(hào)。
fmt.Printf("%%") // 輸出 %
五、布爾占位符
%t
true 或 false。
fmt.Printf("%t", true) // 輸出 true
六、整數(shù)占位符
1. %b
二進(jìn)制。
fmt.Printf("%b", 4) // 輸出 100
2. %c
Unicode
碼轉(zhuǎn)字符。
fmt.Printf("%c", 0x82d7) // 輸出 苗
3. %d、%5d、%-5d、%05d
十進(jìn)制整數(shù)表示。
fmt.Printf("%d,%d,%d", 10, 010, 0x10) // 輸出 10,8,16
三個(gè)數(shù)據(jù): 10
十進(jìn)制, 010
八進(jìn)制, 0x10
十六進(jìn)制
占位符還可以指定最小寬度,格式如下:
%5d %-5d %05d
例:
fmt.Printf("|%5d|%-5d|%05d|", 1, 1, 1) // 輸出 | 1|1 |00001|
4. %o、%#o
八進(jìn)制表示
fmt.Printf("%o,%o,%o", 10, 010, 0x10) // 輸出 12,10,20
在很多開發(fā)語言中,0 打頭的數(shù)字都表示八進(jìn)制。通過 %#o
輸出帶 0 開頭。
fmt.Printf("\n%#o\n", 10) // 輸出 012
5. %q
同 %c
類似,都是 Unicode
碼轉(zhuǎn)字符,只是結(jié)果多了單引號(hào)。
fmt.Printf("%q", 0x82d7) // 輸出 '苗'
漢字對(duì)應(yīng)表: http://www.chi2ko.com/tool/CJK.htm
6. %x、%#x
十六進(jìn)制表示,字母形式為小寫 a-f, %#x
輸出帶 0x 開頭。
fmt.Printf("%x, %#x", 13, 13) // 輸出 d, 0xd
7. %X、%#X
十六進(jìn)制表示,字母形式為小寫 A-F, %#X
輸出帶 0X 開頭。
fmt.Printf("%X, %#X", 13, 13) // 輸出 D, 0XD
8. %U、%#U
%U:轉(zhuǎn)化為 Unicode
格式規(guī)范。
fmt.Printf("%U", 0x82d7) // 輸出 U+82D7
%#U:轉(zhuǎn)化為 Unicode
格式并帶上對(duì)應(yīng)的字符。
fmt.Printf("%#U", 0x82d7) // 輸出 U+82D7 '苗'
七、浮點(diǎn)數(shù)與復(fù)數(shù)
1. %b
浮點(diǎn)數(shù)轉(zhuǎn)化為 2 的冪的科學(xué)計(jì)數(shù)法。
fmt.Printf("%b", 0.1) // 輸出 7205759403792794p-56
2. %e、%E
10 的冪的科學(xué)計(jì)數(shù)法。
fmt.Printf("%e", 10.2) // 輸出 1.020000e+01
fmt.Printf("%E", 10.2) // 輸出 1.020000E+01 區(qū)別: %e 與 %E 輸出時(shí)的大小寫之分。
3. %f、%.2f
浮點(diǎn)數(shù), %.2f
表示保留 2 位小數(shù), %f
默認(rèn)保留 6 位, %f
與 %F
等價(jià)。
保留的規(guī)則我現(xiàn)在還沒有搞清楚,有時(shí)候符合四舍五入,有時(shí)候不符合,容我下來研究下,再告訴大家。
fmt.Printf("%f", 10.2) // 輸出 10.200000 fmt.Printf("%.2f|%.2f", 10.232, 10.235) // 輸出 10.23|10.23
也可以加入最小寬度,如下:
%9.2f
寬度最小為 9,包含小數(shù)位在內(nèi),精度為 2。%9.f
或%9f
寬度最小為 9。
4. %g、%.3g
根據(jù)情況選擇 %e
或 %f
,但末尾去除 0。
%f 情況如下:
fmt.Printf("%g|%g", 10.20, 1.200000+3.400000i) // 輸出 10.2|(1.2+3.4i)
%e 情況如下:
fmt.Printf("%g|%g", 2e2, 2E2) // 輸出 200|200
%.3g
表示的不是小數(shù)保留 3 位,而是只保留 3 個(gè)數(shù)字。
fmt.Printf("%.3g", 12.34) // 輸出 12.3
思考:官網(wǎng)中 %g 和 %G 是有區(qū)別的,但我測試下來是等價(jià)的,可能我的測試有問題,我給出官網(wǎng)文檔,如下:
%g %e for large exponents, %f otherwise. Precision is discussed below. %G %E for large exponents, %F otherwise
八、字符串與字節(jié)切片
1. %s
字符串或字節(jié)切片
fmt.Printf("%s|%s", "老苗", []byte("嘿嘿嘿")) // 輸出 老苗|嘿嘿嘿
2. %q
有 Go 語言安全轉(zhuǎn)義,雙引號(hào)包裹。
fmt.Printf("%q", "老苗") // 輸出 "老苗"
3. %x、%X
十六進(jìn)制, %x 小寫字母 a - f, %X 大寫字母 A - F。
fmt.Printf("%x|%X", "苗", "苗") // 輸出 e88b97|E88B97
九、指針
%p、%#p
地址,使用十六進(jìn)制表示, %p
帶 0x, %#p
不帶。
num := 2 s := []int{1, 2} fmt.Printf("%p|%p", &num, s) // 輸出 0xc00000a1d0|0xc00000a1e0
十、其它標(biāo)記
1. +
打印數(shù)值的正負(fù)號(hào),對(duì)于 %+q
,只輸出 ASCII
編碼的字符,如果非 ASCII 編碼,則轉(zhuǎn)成 Unicode
編碼輸出。
fmt.Printf("%+d|%+d", 2, -2) // 輸出 +2|-2 fmt.Printf("%+q|%+q", "miao","苗") // 輸出 "miao"|"\u82d7"
2. -
在右側(cè)填充空格,這塊就不舉例了,使用如 %-5d
,浮點(diǎn) %-9.2f
也支持,其它占位符大家可以有興趣自行實(shí)驗(yàn)。
3.
- 為八進(jìn)制添加前導(dǎo) 0,上面已舉例。
- 為十六進(jìn)制添加前導(dǎo) 0x 或 0X,上面已舉例。
- 為
%#p
去掉 0x。 %+q
打印字符串時(shí)使用反引號(hào)包裹。
fmt.Printf("%#q", "苗") // 輸出 `苗`
%#U
打印編碼時(shí),帶上字符,上面已舉例。
4. ' ' 空格
為正負(fù)號(hào)留出空白位置。
fmt.Printf("|% d|", 2) // 輸出 | 2|
5. 0
填充前導(dǎo)的 0,對(duì)于數(shù)字會(huì)移到正負(fù)號(hào)之后,非數(shù)字也可使用。
fmt.Printf("%05s", "a") // 輸出 0000a fmt.Printf("%+05d", 1) // 輸出 +0001
精度截?cái)嘧址?/strong>
給字符串使用精度,用來截?cái)嘧址?/p>
fmt.Printf("%.2s", "abc") // 輸出 ab
總結(jié)
占位符區(qū)分大小寫,總共講了 20 個(gè),但占位符相關(guān)的知識(shí)點(diǎn)其實(shí)還有,我暫時(shí)也不想研究了,因?yàn)樵陧?xiàng)目中也很難使用到。
如果有興趣的,前往官網(wǎng)。地址: https://pkg.go.dev/fmt
到此這篇關(guān)于Go 語言中 20 個(gè)占位符的整理的文章就介紹到這了,更多相關(guān)Go 語言中 20 個(gè)占位符內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
go-micro微服務(wù)domain層開發(fā)示例詳解
這篇文章主要為大家介紹了go-micro微服務(wù)domain層開發(fā)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01CSP communicating sequential processes并發(fā)模型
這篇文章主要為大家介紹了CSP communicating sequential processes并發(fā)模型,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05golang雪花算法實(shí)現(xiàn)64位的ID的示例代碼
本文展示了使用Go語言實(shí)現(xiàn)雪花算法生成64位ID的示例代碼,雪花算法通過當(dāng)前時(shí)間戳、工作節(jié)點(diǎn)ID、數(shù)據(jù)中心ID和序列號(hào)生成唯一的64位ID,確保在分布式系統(tǒng)中的唯一性和時(shí)間順序性,感興趣的可以了解一下2024-09-09go語言簡單的處理http請(qǐng)求的函數(shù)實(shí)例
這篇文章主要介紹了go語言簡單的處理http請(qǐng)求的函數(shù),實(shí)例分析了Go語言處理http請(qǐng)求的技巧,需要的朋友可以參考下2015-03-03