Go?基本數(shù)據(jù)類型與字符串相互轉(zhuǎn)換方法小結(jié)
Go 基本數(shù)據(jù)類型與字符串相互轉(zhuǎn)換
go語(yǔ)言中文文檔:
Go語(yǔ)言標(biāo)準(zhǔn)庫(kù)文檔中文版 | Go語(yǔ)言中文網(wǎng) | Golang中文社區(qū) | Golang中國(guó)Go語(yǔ)言文檔中文版,Go語(yǔ)言中文網(wǎng),中國(guó) Golang 社區(qū),Go語(yǔ)言學(xué)習(xí)園地,致力于構(gòu)建完善的 Golang 中文社區(qū),Go語(yǔ)言愛(ài)好者的學(xué)習(xí)家園。
https://studygolang.com/pkgdoc
1.基本類型轉(zhuǎn)換成字符串(string)
fmt.Sprintf方法
fmt.Sprintf("%參數(shù)", 表達(dá)式)
注意:
- 參數(shù)需要和表達(dá)式的數(shù)據(jù)類型相匹配
- fmt.Sprintf()轉(zhuǎn)換后返回字符串結(jié)果
func main() { var num1 int = 99 var num2 float64 = 23.55 var b bool = true var mych byte = 'd' var st = string // 空的string // 轉(zhuǎn)化成string str = fmt.Sprintf("%d", num1) str = fmt.Sprintf("%f", num2) str = fmt.Sprintf("%t", b) str = fmt.Sprintf("%c", mych) }
strconv包
package main import ( "fmt" "strconv" ) func main() { var num1 int = 99 var num2 float64 = 23.55 var b bool = true var mych byte = 'd' var st = string // 空的string str = strconv.FormatInt(int64(num1), 10) // 轉(zhuǎn)出10進(jìn)制字符串 fmt.Printf("type: %T, str: %q\n", str, str) // 格式化輸出 // "f" 轉(zhuǎn)換成浮點(diǎn)型數(shù)據(jù)后的一種表示格式,詳見(jiàn)文檔 // 10 精度 // 64 轉(zhuǎn)換成float64 str = strconv.FormatFloat(num2, "f", 10, 64) // str = strconv.FormatBool(b) // 轉(zhuǎn)出布爾類型字符串 // 將整型變量轉(zhuǎn)換成字符串,特例函數(shù) var num3 int = 333 str = strconv.Itoa(num3) // 這里num3為int型,如果不是需要先顯示轉(zhuǎn)換 }
2.字符串轉(zhuǎn)換成基本數(shù)據(jù)類型 strconv包
func main() { // 布爾類型轉(zhuǎn)換 var str string = "true" var b bool b, _ = strconv.ParseBool(str) // 整型轉(zhuǎn)換 var str2 string = "232" var n int64 var n2 int // 10 轉(zhuǎn)換成10進(jìn)制 // 0、8、16、32、64 分別代表 int、int8、int16、int32、int64 n, _ = strconv.ParseInt(str2, 10, 64) n2 = int(n) // 獲取int類型的值,顯示轉(zhuǎn)換 // 浮點(diǎn)型轉(zhuǎn)換 var str3 string = "22.33" var f float64 f, _ = strconv.ParseFloat(str3, 64) }
注意:
將string類型轉(zhuǎn)換成基本類型時(shí),必須確保string類型是有效的;如果是無(wú)效值則會(huì)轉(zhuǎn)換成功,但是轉(zhuǎn)換后的值為基本類型的默認(rèn)值。例如不能把"ddd"轉(zhuǎn)換成一個(gè)整數(shù),如果這樣做,golang直接將其轉(zhuǎn)換成0
補(bǔ)充:
Go - 基本數(shù)據(jù)類型和其字符串表示之間轉(zhuǎn)換
1. 基本數(shù)據(jù)類型和其字符串表示之間轉(zhuǎn)換
基本類型的值,都有一個(gè)字符串表示,如數(shù)字類型值
1
字符串表示為"1"
,字符的編碼為Unicode
或者UTF-8
,數(shù)字的編碼是int
,底層存儲(chǔ)的數(shù)據(jù)格式本質(zhì)上不一樣,基本類型的轉(zhuǎn)換本質(zhì)上只是文法語(yǔ)義上的轉(zhuǎn)化
1.1 Go 語(yǔ)言基本類型
- 整數(shù) : 有符號(hào)
int int8 int16 int32 int64
無(wú)符號(hào):uint uint8 uint16 uint32 uint64
- 小數(shù):
float32 flat63
- 字符串:
string
1.2 轉(zhuǎn)換過(guò)程中可能得錯(cuò)誤
基本數(shù)據(jù)類型到字符串表示的轉(zhuǎn)換,不會(huì)出錯(cuò),但字符表示到基本類型的轉(zhuǎn)換可能會(huì)有以下錯(cuò)誤
- 超出目標(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)類型語(yǔ)法
package main import ( "fmt" "strconv" ) func main() { numStr := "xx" // xx字符串值無(wú)法表示為對(duì)應(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)換
- 字符串與帶引號(hào)之間轉(zhuǎn)化
package main import ( "fmt" "strconv" ) func main() { name := "dream_fish n" // 添加上引號(hào) fmt.Println("result:", strconv.Quote(name)) // 去除引號(hào) 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" // 第一個(gè)參數(shù)是需要轉(zhuǎn)換的字符串,第二個(gè)參數(shù)是int類型的進(jìn)制,第三個(gè)參數(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)) // 無(wú)符號(hào)整肅 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)
的簡(jiǎn)寫
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
方法是一個(gè)將基本類型的字符串表示添加到字節(jié)切片的快捷方式
到此這篇關(guān)于Go 基本數(shù)據(jù)類型與字符串相互轉(zhuǎn)換方法小結(jié)的文章就介紹到這了,更多相關(guān)go基本數(shù)據(jù)類型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- golang中字符串和數(shù)字轉(zhuǎn)換方法
- Go實(shí)現(xiàn)字符串與數(shù)字的高效轉(zhuǎn)換
- Go中基本數(shù)據(jù)類型和字符串表示之間轉(zhuǎn)換詳解
- Golang中int類型和字符串類型相互轉(zhuǎn)換的實(shí)現(xiàn)方法
- Go語(yǔ)言rune與字符串轉(zhuǎn)換的密切關(guān)系解析
- Go如何實(shí)現(xiàn)json字符串與各類struct相互轉(zhuǎn)換
- 淺談Go中數(shù)字轉(zhuǎn)換字符串的正確姿勢(shì)
- go語(yǔ)言實(shí)現(xiàn)字符串與其它類型轉(zhuǎn)換(strconv包)
相關(guān)文章
一些關(guān)于Go程序錯(cuò)誤處理的相關(guān)建議
錯(cuò)誤處理在每個(gè)語(yǔ)言中都是一項(xiàng)重要內(nèi)容,眾所周知,通常寫程序時(shí)遇到的分為異常與錯(cuò)誤兩種,Golang中也不例外,這篇文章主要給大家介紹了一些關(guān)于Go程序錯(cuò)誤處理的相關(guān)建議,需要的朋友可以參考下2021-09-09使用VSCODE配置GO語(yǔ)言開(kāi)發(fā)環(huán)境的完整步驟
Go語(yǔ)言是采用UTF8編碼的,理論上使用任何文本編輯器都能做Go語(yǔ)言開(kāi)發(fā),大家可以根據(jù)自己的喜好自行選擇,下面這篇文章主要給大家介紹了關(guān)于使用VSCODE配置GO語(yǔ)言開(kāi)發(fā)環(huán)境的完整步驟,需要的朋友可以參考下2022-11-11go 迭代string數(shù)組操作 go for string[]
這篇文章主要介紹了go 迭代string數(shù)組操作 go for string[],具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12Go語(yǔ)言中命令行參數(shù)解析工具pflag的使用指南
在使用?Go?進(jìn)行開(kāi)發(fā)的過(guò)程中,命令行參數(shù)解析是我們經(jīng)常遇到的需求,于是?Go?社區(qū)中出現(xiàn)了一個(gè)叫?pflag?的第三方包,功能更加全面且足夠強(qiáng)大,下面我們就來(lái)看看它的具體使用吧2024-11-11分析Go語(yǔ)言中CSP并發(fā)模型與Goroutine的基本使用
我們都知道并發(fā)是提升資源利用率最基礎(chǔ)的手段,尤其是當(dāng)今大數(shù)據(jù)時(shí)代,流量對(duì)于一家互聯(lián)網(wǎng)企業(yè)的重要性不言而喻。串流顯然是不行的,尤其是對(duì)于web后端這種流量的直接載體。并發(fā)是一定的,問(wèn)題在于怎么執(zhí)行并發(fā)。常見(jiàn)的并發(fā)方式有三種,分別是多進(jìn)程、多線程和協(xié)程2021-06-06