Go語言中的格式化占位符的實(shí)現(xiàn)示例
在 Go 語言中,fmt 包提供了大量的格式化占位符,用于格式化輸出不同類型的數(shù)據(jù)。選擇合適的占位符,可以確保輸出的內(nèi)容格式正確、清晰易懂。
常見的占位符:
基本類型
%v:按值的默認(rèn)格式輸出。適用于任何類型。%+v:在%v的基礎(chǔ)上,結(jié)構(gòu)體會(huì)額外輸出字段名。%#v:輸出 Go 語法表示的值。結(jié)構(gòu)體會(huì)輸出詳細(xì)的字段信息和類型。%T:輸出值的類型。%%:字面百分號(hào)(%本身)。
整數(shù)類型
%d:十進(jìn)制整數(shù)。%b:二進(jìn)制格式。%o:八進(jìn)制格式。%x:十六進(jìn)制格式(小寫字母)。%X:十六進(jìn)制格式(大寫字母)。%c:相應(yīng) Unicode 碼點(diǎn)的字符。
浮點(diǎn)數(shù)和復(fù)數(shù)
%f:標(biāo)準(zhǔn)浮點(diǎn)數(shù)表示(小數(shù)部分)。%e:科學(xué)計(jì)數(shù)法表示(小寫 e)。%E:科學(xué)計(jì)數(shù)法表示(大寫 E)。%g:根據(jù)具體情況選擇%f或%e表示。
字符串和字節(jié)
%s:字符串。%q:帶雙引號(hào)的字符串,安全轉(zhuǎn)義。%x:以十六進(jìn)制表示字符串或字節(jié)切片。%X:以大寫十六進(jìn)制表示字符串或字節(jié)切片。
布爾類型
%t:布爾值 (true或false)。
指針
%p:指針的十六進(jìn)制表示。
如何選擇占位符:
選擇占位符時(shí),首先需要根據(jù)數(shù)據(jù)類型選擇合適的格式化符號(hào),具體情況如下:
輸出通用數(shù)據(jù)類型:
使用 %v 是通用、默認(rèn)的選擇。如果你不確定類型,%v 可以輸出所有類型的值。例如:
logx.Infof("Result: %v", result)
輸出結(jié)構(gòu)體:
如果想要查看結(jié)構(gòu)體的詳細(xì)信息,可以使用 %+v 輸出字段名和值,或者使用 %#v 輸出 Go 語言格式的值。例如:
logx.Infof("Struct data: %+v", myStruct)
logx.Infof("Go syntax: %#v", myStruct)
輸出字符串:
一般使用 %s 輸出字符串;如果需要輸出帶雙引號(hào)和轉(zhuǎn)義字符的安全字符串,使用 %q。例如:
logx.Infof("User input: %s", input)
logx.Infof("Escaped string: %q", input)
輸出整數(shù):
使用 %d 輸出十進(jìn)制整數(shù),如果需要以二進(jìn)制或十六進(jìn)制表示,可以分別使用 %b 和 %x。例如:
logx.Infof("User age: %d", age)
logx.Infof("Memory address in hex: %x", pointer)
輸出浮點(diǎn)數(shù):
一般使用 %f 輸出浮點(diǎn)數(shù),輸出帶有小數(shù)部分;如果需要科學(xué)計(jì)數(shù)法表示,使用 %e 或 %E。例如:
logx.Infof("Price: %f", price)
logx.Infof("Price in scientific notation: %e", price)
輸出指針:
如果你需要輸出一個(gè)指針的值,使用 %p 會(huì)顯示其十六進(jìn)制地址。例如:
logx.Infof("Pointer address: %p", &myVar)
實(shí)際案例:
假設(shè)我們有如下數(shù)據(jù):
taskID := 12345
price := 1234.567
name := "Alice"
completed := true
myStruct := struct {
ID int
Name string
}{
ID: 1,
Name: "TestTask",
}
使用占位符輸出:
logx.Infof("Task ID: %d", taskID) // 輸出十進(jìn)制整數(shù)
logx.Infof("Price: %f", price) // 輸出浮點(diǎn)數(shù)
logx.Infof("User: %s", name) // 輸出字符串
logx.Infof("Task completed: %t", completed) // 輸出布爾值
logx.Infof("Task info: %+v", myStruct) // 輸出結(jié)構(gòu)體,帶字段名和值
占位符一覽表:
| 占位符 | 說明 | 示例 |
|---|---|---|
%v | 默認(rèn)格式 | logx.Infof("%v", 42) |
%+v | 結(jié)構(gòu)體字段和值 | logx.Infof("%+v", obj) |
%#v | Go 語法表示值 | logx.Infof("%#v", obj) |
%T | 輸出值的類型 | logx.Infof("%T", obj) |
%d | 十進(jìn)制整數(shù) | logx.Infof("%d", 123) |
%b | 二進(jìn)制整數(shù) | logx.Infof("%b", 7) |
%x | 十六進(jìn)制小寫 | logx.Infof("%x", 255) |
%f | 浮點(diǎn)數(shù) | logx.Infof("%f", 3.14) |
%t | 布爾值 | logx.Infof("%t", true) |
%p | 指針地址 | logx.Infof("%p", ptr) |
%s | 字符串 | logx.Infof("%s", "abc") |
%q | 帶雙引號(hào)的字符串 | logx.Infof("%q", "abc") |
通過根據(jù)數(shù)據(jù)類型選擇正確的占位符,可以確保輸出信息的格式化和可讀性。
到此這篇關(guān)于Go語言中的格式化占位符的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Go 格式化占位符內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go集成swagger實(shí)現(xiàn)在線接口文檔的教程指南
wagger是一個(gè)用于設(shè)計(jì),構(gòu)建和文檔化API的開源框架,在Go語言中,Swagger可以幫助后端開發(fā)人員快速創(chuàng)建和定義RESTful API,并提供自動(dòng)生成接口文檔的功能,所以本文給大家介紹了Go集成swagger實(shí)現(xiàn)在線接口文檔的方法,需要的朋友可以參考下2024-11-11
Go數(shù)據(jù)結(jié)構(gòu)之映射map方式
這篇文章主要介紹了Go數(shù)據(jù)結(jié)構(gòu)之映射map方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-06-06
一文帶你了解Golang中類型轉(zhuǎn)換庫cast的使用
你是否在使用 Go 的過程中因?yàn)轭愋娃D(zhuǎn)換的繁瑣而苦惱過?你是否覺得 Go 語言中的類型斷言可能會(huì) panic 而對(duì)自己寫的代碼有那么一點(diǎn)點(diǎn)不放心?本文就為大家推薦一個(gè)用于類型轉(zhuǎn)換的第三方庫 cast 絕對(duì)是一個(gè)值得嘗試的選擇2023-02-02
深入理解Golang?make和new的區(qū)別及實(shí)現(xiàn)原理
在Go語言中,有兩個(gè)比較雷同的內(nèi)置函數(shù),分別是new和make方法,二者都可以用來分配內(nèi)存,那他們有什么區(qū)別呢?下面我們就從底層來分析一下二者的不同。感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助2022-10-10

