詳解Go語言strconv與其他基本數(shù)據(jù)類型轉(zhuǎn)換函數(shù)的使用
前言
上篇文章 一文了解 Go 標(biāo)準(zhǔn)庫 strings 常用函數(shù)和方法 介紹了 strings 標(biāo)注庫里的一些常用的函數(shù)和方法,本文也是以 string 類型為中心,通過 strconv 標(biāo)準(zhǔn)庫,介紹其與其他基本數(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法轉(zhuǎn)成數(shù)字,例如 1a1,此函數(shù)就會(huì)返回 NumError 錯(cuò)誤,而 Itoa 函數(shù),無論傳入的是什么樣的數(shù)字,都可以轉(zhuǎn)為 string,因此在轉(zhuǎn)換的過程中沒有 error 的說法。
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)的還有無符號(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ù)字沒有 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)換過程中所產(chǎn)生的錯(cuò)誤
import (
"fmt"
"strconv"
)
func main() {
num, err := strconv.ParseFloat("11.05", 64)
if err != nil {
return
}
fmt.Println(num)
}如果傳入的 s 的語法錯(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)?bool 類型的可選值只有 true 和 false,其他值無法轉(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ì)開發(fā)中 string 類型與其他基本數(shù)據(jù)類型轉(zhuǎn)換的場(chǎng)景不成問題。
到此這篇關(guān)于詳解Go語言strconv與其他基本數(shù)據(jù)類型轉(zhuǎn)換函數(shù)的使用的文章就介紹到這了,更多相關(guān)Go語言strconv內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
golang中兩個(gè)協(xié)程交替打印數(shù)字和字母的實(shí)現(xiàn)
這篇文章給大家介紹了golang中兩個(gè)協(xié)程交替打印數(shù)字和字母的實(shí)現(xiàn),文中通過代碼示例講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-01-01
Go返回int64類型字段超出javascript Number范圍的解決方法
這篇文章主要介紹了Go返回int64類型字段超出javascript Number范圍的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
VS Code配置Go語言開發(fā)環(huán)境的詳細(xì)教程
這篇文章主要介紹了VS Code配置Go語言開發(fā)環(huán)境的詳細(xì)教程,本文通過實(shí)例代碼圖文相結(jié)合的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05

