go語言實現(xiàn)字符串與其它類型轉(zhuǎn)換(strconv包)
與字符串相關(guān)的類型轉(zhuǎn)換都是通過 strconv 包實現(xiàn)的
strconv包概述
strconv是兩個單詞的縮寫。string convert = strconv
strconv包位于Go語言的標(biāo)準(zhǔn)庫中,它提供了一系列用于字符串和基本數(shù)據(jù)類型之間轉(zhuǎn)換的函數(shù)。這些函數(shù)主要包括以下幾種類型:
- 將基本數(shù)據(jù)類型轉(zhuǎn)換為字符串的函數(shù),如Itoa、FormatInt、FormatFloat、FormatBool等。
- 將字符串解析為基本數(shù)據(jù)類型的函數(shù),如Atoi、ParseInt、ParseFloat、ParseBool等。
- 附加到已存在字節(jié)數(shù)組的函數(shù),如AppendInt、AppendFloat、AppendBool等。
- 其他輔助函數(shù),如IsPrint、IsGraphic、Quote、Unquote等。
將字符串轉(zhuǎn)換為其他基礎(chǔ)類型的過程叫做解析parse,其他基礎(chǔ)類型轉(zhuǎn)換為字符串的過程成為格式化format
1、string與int類型轉(zhuǎn)換
1.1、Atoi()函數(shù)用于將字符串類型的整數(shù)轉(zhuǎn)換為int類型
strconv.Atoi(s string) (i int, err error)
由于string可能無法轉(zhuǎn)換為int,所以有兩個返回值:第一個返回值是轉(zhuǎn)換成的int值,第二個返回值判斷是否轉(zhuǎn)換成功 //var age ="22歲" 轉(zhuǎn)換失敗 var age ="22" // 轉(zhuǎn)換成功 age1,err:=strconv.Atoi(age) if err != nil { fmt.Println("轉(zhuǎn)換出錯") return }else { fmt.Printf("類型是:%T,值是:%d",age1,age1) }
1.2、Itoa()函數(shù)用于將int類型數(shù)據(jù)轉(zhuǎn)換為對應(yīng)的字符串表示
strconv.Itoa(i int) string
i := 100 s := strconv.Itoa(i) fmt.Println("類型是:%T 值是:%#v\n", s2, s2) // 類型是:string 值是:"999"
2、Parse系列函數(shù)
Parse類函數(shù)用于轉(zhuǎn)換字符串為給定類型的值:ParseBool()、ParseFloat()、ParseInt()、ParseUint()
2.1、ParseBool()strconv.ParseBool(str string) (value bool, err error)
返回字符串表示的bool值,它只接受值為1、0、t、f、T、F、true、false、True、False、TRUE、FALSE的字符串,否則返回錯誤 fmt.Println(strconv.ParseBool("1")) // true fmt.Println(strconv.ParseBool("t")) // true fmt.Println(strconv.ParseBool("T")) // true fmt.Println(strconv.ParseBool("true")) // true fmt.Println(strconv.ParseBool("True")) // true fmt.Println(strconv.ParseBool("TRUE")) // true fmt.Println(strconv.ParseBool("0")) // false fmt.Println(strconv.ParseBool("f")) // false fmt.Println(strconv.ParseBool("F")) // false fmt.Println(strconv.ParseBool("false")) // false fmt.Println(strconv.ParseBool("False")) // false fmt.Println(strconv.ParseBool("FALSE")) // false
2.2、ParseInt()返回字符串表示的整數(shù)值,接受正負(fù)號
strconv.ParseInt(s string, base int, bitSize int) (i int64, err error)
- s:要轉(zhuǎn)換的字符串
- base:指定進(jìn)制(2進(jìn)制到36進(jìn)制) ,當(dāng)base=0的時候,表示根據(jù)string的前綴來判斷以什么進(jìn)制去解析:0x開頭的以16進(jìn)制的方式去解析,0開頭的以8進(jìn)制方式去解析,其它的以10進(jìn)制方式解析
- bitSize:起到string轉(zhuǎn)int時的一個限制作用,有效值為0、8、16、32、64。如果超過了bitSize的限制作用就會將報錯信息輸出到error中
- 返回轉(zhuǎn)換后的結(jié)果和轉(zhuǎn)換失敗的錯誤
//轉(zhuǎn)換成功 s1 := "123" ps1,err := strconv.ParseInt(s1, 10, 8) // 指將s1轉(zhuǎn)換為10進(jìn)制數(shù),8指的是轉(zhuǎn)換結(jié)果最大值不超過int8,即127 if err != nil{ fmt.Printf("err is %v\n", err) return }else{ fmt.Printf("類型: %T ,值: %d", ps1, ps1) //類型: int64 ,值: 123 } //轉(zhuǎn)換失敗 s1 := "129" // 超過int8最大值127 ps1,err := strconv.ParseInt(s1, 10, 8) // 指將s1轉(zhuǎn)換為10進(jìn)制數(shù),8指的是轉(zhuǎn)換結(jié)果最大值不超過int8,即127 if err != nil{ fmt.Printf("err is %v\n", err) return }else{ fmt.Printf("類型: %T ,值: %d", ps1, ps1) //err is strconv.ParseInt: parsing "129": value out of range }
2.3 ParseUint()ParseUint類似ParseInt但不接受正負(fù)號,用于無符號整型
strconv.ParseUint(s string, base int, bitSize int) (i int64, err error)
2.4、ParseFloat()strconv.ParseFloat(s string, bitSize int) (f float64, err error)
- s:要轉(zhuǎn)換的字符串
- bitSize:指定浮點類型(32:float32、64:float64)
- 如果 s 是合法的格式,而且接近一個浮點值,則返回浮點數(shù)的四舍五入值
- 如果 s 不是合法的格式,則返回“語法錯誤”
- 如果轉(zhuǎn)換結(jié)果超出 bitSize 范圍,則返回“超出范圍”
f := "1.2342332" f1, err := strconv.ParseFloat(f, 64) if err != nil { fmt.Printf("err is %v\n", err) return } else { fmt.Printf("類型為:%T,值為:%f", f1, f1) } //類型為:float64,值為:1.234230
3、Format系列函數(shù)
將給定類型格式化為string類型數(shù)據(jù)
3.1、FormatBool()用于將布爾類型的值轉(zhuǎn)換為字符串類型
strconv.FormatBool(b bool) string
- 如果 b 的值為 true,則將返回字符串 “true”,否則將返回 “false”
fmt.Println(strconv.FormatBool(0 < 1)) // true fmt.Println(strconv.FormatBool(0 > 1)) // false fmt.Println(strconv.FormatBool(true)) // 將true轉(zhuǎn)換為字符串
3.2、FormatInt()strconv.FormatInt(i int64, base int) string
- i :要轉(zhuǎn)換的整數(shù)類型
- base:2-32進(jìn)制,結(jié)果中會使用小寫字母’a’到’z’表示大于10的數(shù)字
s3 := strconv.FormatInt(-2, 16) fmt.Printf("類型為:%T,值為:%#v",s3,s3) // 類型為:string,值為:"-2"
3.3、FormatUint()是FormatInt的無符號整數(shù)版本
strconv.FormatUint(i int64, base int) string
3.4、FormatFloat()將浮點數(shù)表示為字符串并返回
strconv.FormatFloat(f float64, fmt byte, prec, bitSize int) string
- f:要轉(zhuǎn)換的浮點數(shù)
- fmt表示格式:
‘b’ (-ddddp±ddd,二進(jìn)制指數(shù))
‘e’ (-d.dddde±dd,十進(jìn)制指數(shù))
‘E’ (-d.ddddE±dd,十進(jìn)制指數(shù))
‘f’ (-ddd.dddd,沒有指數(shù))
‘g’ (‘e’:大指數(shù),‘f’:其它情況)
‘G’ (‘E’:大指數(shù),‘f’:其它情況) - prec控制精度
如果格式標(biāo)記為 ‘e’,‘E’和’f’,則 prec 表示小數(shù)點后的數(shù)字位數(shù)
如果格式標(biāo)記為 ‘g’,‘G’,則 prec 表示總的數(shù)字位數(shù)(整數(shù)部分+小數(shù)部分)
f := 100.123456789 fmt.Println(strconv.FormatFloat(f, 'g', 5, 64)) // 100.12 fmt.Println(strconv.FormatFloat(f, 'G', 5, 64)) // 100.12 fmt.Println(strconv.FormatFloat(f, 'f', 5, 64)) // 100.12346 fmt.Println(strconv.FormatFloat(f, 'e', 5, 64)) // 1.00123e+02 fmt.Println(strconv.FormatFloat(f, 'E', 5, 64)) // 1.00123E+02
4、Append系列
Append類的函數(shù)和Format類的函數(shù)工作方式類似,只不過將轉(zhuǎn)換后的結(jié)果追加到一個slice中
4.1、AppendBool()strconv.AppendBool(num1 []byte, num2 bool) []byte
- 根據(jù)num2的值將bool(即true或false)追加到num1中,并返回擴(kuò)展的緩沖區(qū)
val := []byte("Is Bool: ") val = strconv.AppendBool(val, true) fmt.Println(string(val)) // Is Bool: true
4.2、AppendFloat()strconv.AppendFloat(dst []byte, f float64, fmt byte, prec int, bitSize int) []byte
- 將浮點數(shù) f 轉(zhuǎn)換為字符串值,并將轉(zhuǎn)換結(jié)果追加到 dst 的尾部
- 返回追加后的 []byte
val1 := []byte("Float32值:") val1 = strconv.AppendFloat(val1,4.5683568954,'E',-1,32) fmt.Println(string(val1)) val2 := []byte("Float64值:") val2 = strconv.AppendFloat(val2,6.7415678653,'E',-1,64) fmt.Println(string(val2))
4.3、AppendInt()將 int 型整數(shù) i 轉(zhuǎn)換為字符串形式,并追加到 dst 的尾部
strconv.AppendInt(dst []byte, i int64, base int) []byte
- i:要轉(zhuǎn)換的字符串
- base:進(jìn)位制
- 返回追加后的 []byte
val1 := []byte("整數(shù)值(進(jìn)制10): ") val1 = strconv.AppendInt(val1, -35, 10) fmt.Println(string(val1)) //整數(shù)值(進(jìn)制10): -35 val2 := []byte("整數(shù)值(進(jìn)制16): ") val2 = strconv.AppendInt(val2, -44, 16) fmt.Println(string(val2)) //整數(shù)值(進(jìn)制16): -2c
4.4、AppendUint()是AppendInt的無符號整數(shù)版本
5、其它
5.1、isPrint()返回一個字符是否是可打印的,r必須是:字母(廣義)、數(shù)字、標(biāo)點、符號、ASCII空格
res:=strconv.IsPrint('n') // true 可打印 res:=strconv.IsPrint('\n') // false 不可打印
5.2、CanBackquote()返回字符串s是否可以不被修改的表示為一個單行的、沒有空格和tab之外控制字符的反引號字符串
res:=strconv.CanBackquote(`lxx is Nb`) // true res:=strconv.CanBackquote(`lxx is Nb`) // false :因為帶回車 fmt.Println(res)
到此這篇關(guān)于go語言實現(xiàn)字符串與其它類型轉(zhuǎn)換(strconv包)的文章就介紹到這了,更多相關(guān)go 字符串轉(zhuǎn)換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Golang高性能持久化解決方案BoltDB數(shù)據(jù)庫介紹
這篇文章主要為大家介紹了Golang高性能持久化解決方案BoltDB數(shù)據(jù)庫介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11Go語言切片前或中間插入項與內(nèi)置copy()函數(shù)詳解
這篇文章主要介紹了Go語言切片前或中間插入項與內(nèi)置copy()函數(shù)詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04gorm update傳入struct對象,零值字段不更新的解決方案
這篇文章主要介紹了gorm update傳入struct對象,零值字段不更新的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04