Go中基本數(shù)據(jù)類型和字符串表示之間轉(zhuǎn)換詳解
1. 基本數(shù)據(jù)類型和其字符串表示之間轉(zhuǎn)換
基本類型的值,都有一個字符串表示,如數(shù)字類型值1
字符串表示為 "1"
,字符的編碼為Unicode
或者UTF-8
,數(shù)字的編碼是 int
,底層存儲的數(shù)據(jù)格式本質(zhì)上不一樣,基本類型的轉(zhuǎn)換本質(zhì)上只是文法語義上的轉(zhuǎn)化
1.1 Go 語言基本類型
- 整數(shù) : 有符號
int int8 int16 int32 int64
無符號:uint uint8 uint16 uint32 uint64
- 小數(shù):
float32 flat63
- 字符串:
string
1.2 轉(zhuǎn)換過程中可能得錯誤
基本數(shù)據(jù)類型到字符串表示的轉(zhuǎn)換,不會出錯,但字符表示到基本類型的轉(zhuǎn)換可能會有以下錯誤
超出目標(biāo)類型的表示范圍
package main import ( "fmt" "strconv" ) func main() { numStr := "400" // 400 數(shù)字值已經(jīng)超出int8(-128, 127)類型表示的范圍 num, err := strconv.ParseInt(numStr, 10, 8) if err != nil { fmt.Println(err) return } fmt.Println("conv result:", num) } // 輸出:strconv.ParseInt: parsing "400": value out of range
不符合目標(biāo)類型語法
package main import ( "fmt" "strconv" ) func main() { numStr := "xx" // xx字符串值無法表示為對應(yīng)的整數(shù)值 num, err := strconv.ParseInt(numStr, 10, 8) if err != nil { fmt.Println(err) return } fmt.Println("conv result:", num) } // 輸出:strconv.ParseInt: parsing "400": value out of range
2. 轉(zhuǎn)換
字符串與帶引號之間轉(zhuǎn)化
package main import ( "fmt" "strconv" ) func main() { name := "dream_fish n" // 添加上引號 fmt.Println("result:", strconv.Quote(name)) // 去除引號 school := `"University"` school_, err := strconv.Unquote(school) if err != nil { fmt.Println("err:", err) return } fmt.Println("result:", school_) }
字符串與布爾類型之間的轉(zhuǎn)換
字符串轉(zhuǎn)bool
類型
package main import ( "fmt" "strconv" ) func main() { // 包含所有可以轉(zhuǎn)bool類型的值 boolStringValues := []string{"1", "0", "t", "f", "true", "false", "True", "False"} // 進(jìn)行轉(zhuǎn)換 for _, b := range boolStringValues { result, err := strconv.ParseBool(b) if err != nil { fmt.Printf("parse value: %s err:%s\n", b, err) continue } fmt.Printf("parse value: %s err:%s\n", b, result) } }
bool
類型轉(zhuǎn)字符串
package main import ( "fmt" "strconv" ) func main() { // 包含布爾類型的值 boolValues := []bool{false, true} // 進(jìn)行轉(zhuǎn)換 for _, b := range boolValues { result := strconv.Quote(strconv.FormatBool(b)) fmt.Printf("format value: %t err:%s\n", b, result) } }
數(shù)值與字符串之間的轉(zhuǎn)換
字符串轉(zhuǎn)數(shù)值
package main import ( "fmt" "strconv" ) func main() { // 轉(zhuǎn)換為 int8類型 int8String := "122" // 第一個參數(shù)是需要轉(zhuǎn)換的字符串,第二個參數(shù)是int類型的進(jìn)制,第三個參數(shù)是bit位數(shù) intNum, err := strconv.ParseInt(int8String, 10, 8) if err != nil { fmt.Println("err:", err) } fmt.Println("int8 num:", intNum) // 字符串正整數(shù) uintNum, err := strconv.ParseUint(int8String, 10, 8) if err != nil { fmt.Println("err:", err) } fmt.Println("uint8 num:", uintNum) // 字符串轉(zhuǎn)浮點(diǎn)數(shù) floatNumStr := "67.9" floatNum, err := strconv.ParseFloat(floatNumStr, 64) if err != nil { fmt.Println("err:", err) } fmt.Println("float64 num:", floatNum) }
數(shù)值轉(zhuǎn)字符串
strconv
包的Format
系列方式
package main import ( "fmt" "strconv" ) func main() { // 整肅轉(zhuǎn)字符串 intNum := int64(8) fmt.Printf("%s\n", strconv.FormatInt(intNum, 10)) // 浮點(diǎn)數(shù)轉(zhuǎn)字符串 result := strconv.FormatFloat(88.9, 'f', 2, 64) fmt.Println("float to str:", result) // bool類型轉(zhuǎn)字符串 fmt.Println("bool to str:", strconv.FormatBool(true)) // 無符號整肅 fmt.Println("uint to str", strconv.FormatUint(111, 10)) }
fmt
包Sprint
系列方式
package main import ( "fmt" ) func main() { // 整肅轉(zhuǎn)字符串 intValue := int64(8) boolValue := true floatValue := 44.2 uintValue := 33 result := fmt.Sprintf("int: %d, bool: %t, float: %f, unit: %d", intValue, boolValue, floatValue, uintValue) fmt.Printf(result) }
strconv
包的Atoi
與Itoa
方法,其實(shí)是 ParseInt(s, 10, 0)
FormatInt(i, 10)
的簡寫
package main import ( "fmt" "strconv" ) func main() { // int類型值轉(zhuǎn)換為字符串 result := strconv.Itoa(100) fmt.Println(result) // 字符串值換換為int類型的值 intString := "200" intValue, err := strconv.Atoi(intString) if err != nil { panic(err) } fmt.Println(intValue) }
3. Append系方法
添加轉(zhuǎn)成基本類型轉(zhuǎn)換成字符串表示的
package main import ( "fmt" "strconv" ) func main() { // 基礎(chǔ)數(shù)據(jù)類型 intValue := int64(100) boolValue := true floatValue := 5.4 buf := []byte("result:") resultValue := strconv.AppendFloat(buf, floatValue, 'f', 2, 64) fmt.Println(string(resultValue)) resultValue = strconv.AppendInt(buf, intValue, 10) fmt.Println(string(resultValue)) resultValue = strconv.AppendBool(buf, boolValue) fmt.Println(string(resultValue)) }
4. 總結(jié)
Parse
系列方法,將字符串表示嘗試轉(zhuǎn)換為基礎(chǔ)類型,Formation
系列方法將基本類型轉(zhuǎn)換為字符串表示,Append
方法是一個將基本類型的字符串表示添加到字節(jié)切片的快捷方式
到此這篇關(guān)于Go中基本數(shù)據(jù)類型和字符串表示之間轉(zhuǎn)換詳解的文章就介紹到這了,更多相關(guān)Go數(shù)據(jù)類型和字符串轉(zhuǎn)換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- golang中字符串和數(shù)字轉(zhuǎn)換方法
- Go實(shí)現(xiàn)字符串與數(shù)字的高效轉(zhuǎn)換
- Go?基本數(shù)據(jù)類型與字符串相互轉(zhuǎn)換方法小結(jié)
- Golang中int類型和字符串類型相互轉(zhuǎn)換的實(shí)現(xiàn)方法
- Go語言rune與字符串轉(zhuǎn)換的密切關(guān)系解析
- Go如何實(shí)現(xiàn)json字符串與各類struct相互轉(zhuǎn)換
- 淺談Go中數(shù)字轉(zhuǎn)換字符串的正確姿勢
- go語言實(shí)現(xiàn)字符串與其它類型轉(zhuǎn)換(strconv包)
相關(guān)文章
Golang使用切片實(shí)現(xiàn)單鏈表的示例代碼
單鏈表(Single?Linked?List)是鏈表數(shù)據(jù)結(jié)構(gòu)的一種實(shí)現(xiàn)方式,它包含一系列節(jié)點(diǎn)(Node),每個節(jié)點(diǎn)都包含一個數(shù)據(jù)域和一個指向下一個節(jié)點(diǎn)的指針,本文給大家介紹了Golang使用切片實(shí)現(xiàn)單鏈表的操作,需要的朋友可以參考下2024-05-05Golang排列組合算法問題之全排列實(shí)現(xiàn)方法
這篇文章主要介紹了Golang排列組合算法問題之全排列實(shí)現(xiàn)方法,涉及Go語言針對字符串的遍歷及排列組合相關(guān)操作技巧,需要的朋友可以參考下2017-01-01golang interface指針實(shí)現(xiàn)示例
本文主要介紹了golang interface指針實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08Go語言字典(map)用法實(shí)例分析【創(chuàng)建,填充,遍歷,查找,修改,刪除】
這篇文章主要介紹了Go語言字典(map)用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Go語言字典的創(chuàng)建、填充、遍歷、查找、修改、刪除等操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-02-02Golang使用archive/zip包實(shí)現(xiàn)ZIP壓縮與解壓
Golang?中的?archive/zip?包用于處理?ZIP?格式的壓縮文件,提供了一系列用于創(chuàng)建、讀取和解壓縮?ZIP?格式文件的函數(shù)和類型,使用起來非常方便,下面就跟隨小編一起了解一下具體使用方法吧2023-08-08