Go標(biāo)準(zhǔn)庫(kù)strconv實(shí)現(xiàn)string類型與其他基本數(shù)據(jù)類型之間轉(zhuǎn)換
前言
上篇文章介紹了 strings
標(biāo)準(zhǔn)庫(kù)里的一些常用的函數(shù)和方法,本文也是以 string
類型為中心,通過(guò) strconv
標(biāo)準(zhǔn)庫(kù),介紹其與其他基本數(shù)據(jù)類型相互轉(zhuǎn)換的函數(shù)。
strconv
strconv
包提供了 string
類型與其他基本數(shù)據(jù)類型之間轉(zhuǎn)換的函數(shù),本文不會(huì)介紹其所有函數(shù),如果想了解更多的小伙伴可以到 Go 包文檔 查看。
string 與 int 之間的轉(zhuǎn)換
Itoa:int 類型轉(zhuǎn) string 類型
Itoa(i int) string
- 參數(shù)
i
為待轉(zhuǎn)換的數(shù)字。
返回值為轉(zhuǎn)換之后的字符串。
import ( "fmt" "strconv" ) func main() { num := 16 str := strconv.Itoa(num) fmt.Printf("類型:%T,值:%s", str, str) // 類型:string,值:16 }
Atoi:string 類型轉(zhuǎn) int 類型
Atoi(s string) (int, error)
- 函數(shù)的參數(shù)為待轉(zhuǎn)換的字符串
返回值有兩個(gè),第一個(gè)是轉(zhuǎn)換之后的整形數(shù)字,第二個(gè)是錯(cuò)誤描述。
import ( "fmt" "strconv" ) func main() { str := "666" num, err := strconv.Atoi(str) if err != nil { fmt.Println("err: ", err.Error()) return } fmt.Printf("類型:%T,值:%d", num, num) // 類型:int,值:666 }
此函數(shù)與 Itoa
函數(shù)相比,多了一個(gè) error
返回值,是因?yàn)槿绻莻魅氲淖址疅o(wú)法轉(zhuǎn)成數(shù)字,例如 1a1
,此函數(shù)就會(huì)返回 NumError
錯(cuò)誤,而 Itoa
函數(shù),無(wú)論傳入的是什么樣的數(shù)字,都可以轉(zhuǎn)為 string
,因此在轉(zhuǎn)換的過(guò)程中沒(méi)有 error
的說(shuō)法。
FormatInt:將數(shù)字轉(zhuǎn)成指定進(jìn)制數(shù)并以 string 類型返回
FormatInt(i int64, base int) string
- 第一個(gè)參數(shù)為指定數(shù)字,類型為
int64
- 第二個(gè)參數(shù)為指定進(jìn)制
第三個(gè)參數(shù)為數(shù)字轉(zhuǎn)成指定進(jìn)制數(shù)后的字符串
import ( "strconv" ) func main() { var num int64 = 2 str := strconv.FormatInt(num, 2) var num2 int64 = 17 str2 := strconv.FormatInt(num2, 16) println(str) // 10 println(str2) // 11 }
上述代碼實(shí)現(xiàn)了將數(shù)字 2
轉(zhuǎn)成二進(jìn)制的形式 10
,將數(shù)字 17
轉(zhuǎn)成十六進(jìn)制的形式 11
,并以 string 類型返回。上述數(shù)字皆代表著有符號(hào)為的 int64
類型,與之對(duì)應(yīng)的還有無(wú)符號(hào)位的 uint64
類型的轉(zhuǎn)換函數(shù) FormatUint
。
ParseInt:給定基數(shù)(進(jìn)制數(shù))和位數(shù),返回對(duì)應(yīng)十進(jìn)制的值
ParseInt(s string, base int, bitSize int) (i int64, err error)
- 第一個(gè)參數(shù)
s
為待解析的字符串 - 第二個(gè)參數(shù)
base
為基數(shù),也就是進(jìn)制數(shù),從0
、2
到36
進(jìn)制。 - 第三個(gè)參數(shù)
bitSize
為位數(shù),0
、8
、16
、32
、64
位分別對(duì)應(yīng)int
、int8
、int16
、int32
、int64
。如果bitSize
小于0
或大于64
,則返回錯(cuò)誤。 - 第一個(gè)返回值
i
為轉(zhuǎn)換之后的數(shù)字
第二個(gè)返回值 err
為轉(zhuǎn)換時(shí)產(chǎn)生的錯(cuò)誤信息,除了 bitSize
小于 0
或大于 64
,會(huì)發(fā)生錯(cuò)誤以外,如果所傳的字符串 s
與 base
參數(shù)或 bitSize
參數(shù)不匹配,也會(huì)發(fā)生錯(cuò)誤。
import ( "fmt" "strconv" ) func main() { parseInt, err := strconv.ParseInt("100", 2, 64) if err != nil { fmt.Println(err.Error()) return } println(parseInt) // 4 parseInt2, err := strconv.ParseInt("666", 2, 64) if err != nil { fmt.Println(err.Error()) // strconv.ParseInt: parsing "666": invalid syntax return } println(parseInt2) }
首先將二進(jìn)制的 100
轉(zhuǎn)成十進(jìn)制,為 4
,然后將二進(jìn)制的 666
轉(zhuǎn)成十進(jìn)制,但是二進(jìn)制所對(duì)應(yīng)的數(shù)字沒(méi)有 666,因此轉(zhuǎn)換錯(cuò)誤,返回 strconv.ParseInt: parsing "666": invalid syntax
錯(cuò)誤信息。與之對(duì)應(yīng)的還有返回?zé)o符號(hào)位的 uint64
類型的轉(zhuǎn)換函數(shù) ParseUint
。
string 與 float 之間的轉(zhuǎn)換
ParseFloat:字符串類型轉(zhuǎn)浮點(diǎn)型類型
ParseFloat(s string, bitSize int) (float64, error)
- 第一個(gè)參數(shù)
s
為帶轉(zhuǎn)換的字符串。 - 第二個(gè)參數(shù)為
bitSize
為轉(zhuǎn)換后的位數(shù),32
代表float32
,64
代表float64
。 - 第一個(gè)返回值為轉(zhuǎn)換后的浮點(diǎn)型數(shù)字。
第二個(gè)返回值為轉(zhuǎn)換過(guò)程中所產(chǎn)生的錯(cuò)誤
import ( "fmt" "strconv" ) func main() { num, err := strconv.ParseFloat("11.05", 64) if err != nil { return } fmt.Println(num) }
如果傳入的 s
的語(yǔ)法錯(cuò)誤如 1s1
,則轉(zhuǎn)換失敗,返回 error
。
FormatFloat:根據(jù)格式 fmt 和精度 prec 將浮點(diǎn)數(shù) f 轉(zhuǎn)換為字符串
FormatFloat(f float64, fmt byte, prec, bitSize int) string
- 第一個(gè)參數(shù)
f
為待轉(zhuǎn)換的浮點(diǎn)數(shù)。 - 第二個(gè)參數(shù)為格式,可選值有
b e E f g G x X
。 - 第三個(gè)參數(shù)
prec
為精度,精確到幾位小數(shù)。 - 返回值為轉(zhuǎn)換后的字符串。
import ( "fmt" "strconv" ) func main() { str := strconv.FormatFloat(5.26, 'f', 1, 64) fmt.Println(str) // 5.3 }
FormatFloat
函數(shù)會(huì)對(duì)結(jié)果值進(jìn)行四舍五入計(jì)算。
string 與 bool 之間的轉(zhuǎn)換
ParseBool:字符串轉(zhuǎn)布爾值
ParseBool(str string) (bool, error)
- 第一個(gè)參數(shù)
str
為待轉(zhuǎn)換的字符串 - 第一個(gè)返回值為轉(zhuǎn)換之后的
bool
值
第二個(gè)返回值為轉(zhuǎn)換時(shí)所產(chǎn)生的錯(cuò)誤。
import ( "fmt" "strconv" ) func main() { bool1, err := strconv.ParseBool("true") if err != nil { fmt.Println(err.Error()) return } fmt.Println(bool1) // true bool2, err := strconv.ParseBool("golang") if err != nil { fmt.Println(err.Error()) // strconv.ParseBool: parsing "golang": invalid syntax return } fmt.Println(bool2) }
第一個(gè)字符串 true
轉(zhuǎn)布爾值成功了,但是第二個(gè)字符串 golang
轉(zhuǎn)布爾值失敗了,因?yàn)?nbsp;bool
類型的可選值只有 true
和 false
,其他值無(wú)法轉(zhuǎn)成布爾值。
FormatBool:布爾值轉(zhuǎn)字符串
FormatBool(b bool) string
- 參數(shù)
b
為帶轉(zhuǎn)換的布爾值。
返回值為轉(zhuǎn)換之后的字符串。
import ( "fmt" "strconv" ) func main() { boolStr := strconv.FormatBool(true) fmt.Println(boolStr) // "true" }
小結(jié)
本文對(duì) string
與 int
類型、float
類型和 bool
類型相互之間轉(zhuǎn)換的函數(shù)進(jìn)行介紹,掌握這些函數(shù)的用法,應(yīng)對(duì)開(kāi)發(fā)中 string
類型與其他基本數(shù)據(jù)類型轉(zhuǎn)換的場(chǎng)景不成問(wèn)題,更多關(guān)于Go strconv類型轉(zhuǎn)換的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Go語(yǔ)言標(biāo)準(zhǔn)庫(kù)sync.Once使用場(chǎng)景及性能優(yōu)化詳解
- Golang標(biāo)準(zhǔn)庫(kù)os/exec執(zhí)行外部命令并獲取其輸出包代碼示例
- Go?1.21.0?新增結(jié)構(gòu)化日志記錄標(biāo)準(zhǔn)庫(kù)log/slog使用詳解
- Go 標(biāo)準(zhǔn)庫(kù)增加metrics指標(biāo)探討分析
- Golang標(biāo)準(zhǔn)庫(kù)unsafe源碼解讀
- go語(yǔ)言標(biāo)準(zhǔn)庫(kù)fmt包的一鍵入門(mén)
- Go標(biāo)準(zhǔn)庫(kù)-ServeMux的使用與模式匹配深入探究
相關(guān)文章
Go中字符串處理?fmt.Sprintf與string.Builder的區(qū)別對(duì)比分析
在Go語(yǔ)言中,我們通常會(huì)遇到兩種主要的方式來(lái)處理和操作字符串:使用fmt.Sprintf函數(shù)和string.Builder類型,本文給大家介紹它們?cè)谛阅芎陀梅ㄉ嫌幸恍╆P(guān)鍵區(qū)別,感興趣的朋友跟隨小編一起看看吧2023-11-11GO項(xiàng)目實(shí)戰(zhàn)之Gorm格式化時(shí)間字段實(shí)現(xiàn)
GORM自帶的time.Time類型JSON默認(rèn)輸出RFC3339Nano格式的,下面這篇文章主要給大家介紹了關(guān)于GO項(xiàng)目實(shí)戰(zhàn)之Gorm格式化時(shí)間字段實(shí)現(xiàn)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01Go?語(yǔ)言入門(mén)之Go?計(jì)時(shí)器介紹
這篇文章主要介紹了Go?語(yǔ)言入門(mén)之Go?計(jì)時(shí)器,文章基于GO語(yǔ)言的相關(guān)資料展開(kāi)對(duì)其中計(jì)時(shí)器的詳細(xì)內(nèi)容。具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-05-05在go文件服務(wù)器加入http.StripPrefix的用途介紹
這篇文章主要介紹了在go文件服務(wù)器加入http.StripPrefix的用途介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12獲取Golang環(huán)境變量的三種方式小結(jié)
本文介紹了Golang中獲取環(huán)境變量的三種方式,包含使用Viper包、GoDotEnv包和os包,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-11-11victoriaMetrics庫(kù)布隆過(guò)濾器初始化及使用詳解
這篇文章主要為大家介紹了victoriaMetrics庫(kù)布隆過(guò)濾器初始化及使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04golang如何實(shí)現(xiàn)mapreduce單進(jìn)程版本詳解
這篇文章主要給大家介紹了關(guān)于golang如何實(shí)現(xiàn)mapreduce單進(jìn)程版本的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01