詳解Go語(yǔ)言中的數(shù)據(jù)類型及類型轉(zhuǎn)換
1、基本數(shù)據(jù)類型
數(shù)據(jù)類型有很多,先研究一下基礎(chǔ)的,例如:布爾型、數(shù)字類型、字符串類型。
數(shù)字類型有uint8、uint16、uint32、uint64、int8、int16、int32、int64(uint和int區(qū)別在于uint為無(wú)符號(hào)整數(shù),即只支持正數(shù),不支持負(fù)數(shù)形式)
數(shù)字浮點(diǎn)型有fload32、float64、complex64、complex126(后面兩個(gè)均為實(shí)數(shù)和虛數(shù)類型,暫時(shí)先不研究)
樣例代碼如下:
//數(shù)據(jù)類型 func test_data() { var a bool var b int16 var c uint64 = 1231254353452 var d float32 = 1.78 fmt.Println(a) fmt.Println(b) fmt.Println(c) fmt.Println(d) fmt.Println("int8范圍:", math.MinInt8, math.MaxInt8) fmt.Println("uint8范圍:", math.MaxUint8) }
執(zhí)行結(jié)果
false
0
1231254353452
1.78
int8范圍: -128 127
uint8范圍: 255
注意
1、如果沒(méi)有賦值的基礎(chǔ)數(shù)據(jù)類型變量具有初始值,不像java默認(rèn)為null。bool類型的初始值為false,int的初始值為0。
2、uint和int的取值范圍不一樣,uint只是正數(shù)。
2、基礎(chǔ)數(shù)據(jù)類型轉(zhuǎn)換
在工程中常常遇到數(shù)據(jù)類型轉(zhuǎn)換問(wèn)題,測(cè)試一下。
樣例代碼如下
//數(shù)據(jù)類型轉(zhuǎn)換 func test_convert() { var num int = 10 var num1 float32 = float32(num) var num2 float64 = float64(num) fmt.Printf("num類型為%T,num1類型為%T,num2類型為%T\n", num, num1, num2) }
執(zhí)行結(jié)果
num類型為int,num1類型為float32,num2類型為float64
注意一下Printf中格式化的動(dòng)詞使用,特意找了下,整理一下。
動(dòng)詞 | 功能 |
---|---|
%v | 按照值的本來(lái)值輸出 |
%+v | 在%v基礎(chǔ)上,對(duì)結(jié)構(gòu)體字段名和值進(jìn)行展開(kāi) |
%#v | 輸出Go語(yǔ)言語(yǔ)法格式的值 |
%T | 輸出Go語(yǔ)言數(shù)據(jù)類型 |
%% | 輸出%本體 |
%b | 輸出以二進(jìn)制方式顯示的整型 |
%o | 輸出以八進(jìn)制方式顯示的整型 |
%d | 輸出以十進(jìn)制方式顯示的整型 |
%x | 輸出以十六進(jìn)制方式顯示的整型,小寫(xiě) |
%X | 輸出以十六進(jìn)制方式顯示的整型,大寫(xiě) |
%U | 以Unicode字符方式輸出 |
%f | 以浮點(diǎn)型方式輸出 |
%p | 指針,十六進(jìn)制方式顯 |
3、基本數(shù)據(jù)類型轉(zhuǎn)為字符串
這也是工程中經(jīng)常使用的場(chǎng)景。
樣例代碼如下,先使用fmt的Sprintf方法轉(zhuǎn)換。
//基礎(chǔ)數(shù)據(jù)類型轉(zhuǎn)為string func test_convert_string() { var a int = 10 var b float64 = 1.8 var c bool = true var d byte = 'd' var e uint64 = 8 var str string fmt.Println(str + "a") str = fmt.Sprintf("%d", a) fmt.Printf("str類型為%T,str=%v\n", str, str) str = fmt.Sprintf("%f", b) fmt.Printf("str類型為%T,str=%v\n", str, str) str = fmt.Sprintf("%t", c) fmt.Printf("str類型為%T,str=%v\n", str, str) str = fmt.Sprintf("%c", d) fmt.Printf("str類型為%T,str=%v\n", str, str) str = fmt.Sprintf("%b", e) fmt.Printf("str類型為%T,str=%v\n", str, str) }
執(zhí)行結(jié)果
a
str類型為string,str=10
str類型為string,str=1.800000
str類型為string,str=true
str類型為string,str=d
str類型為string,str=1000
注意
1、可以看到如果沒(méi)有對(duì)字符串類型做初始復(fù)制,會(huì)默認(rèn)為空字符串。
4、strconv的使用
使用strconv可以對(duì)各種數(shù)據(jù)類型進(jìn)行字符串轉(zhuǎn)換。
樣例如下
//strconv的使用 func test_strconv() { var i int = 10 var x int = 999 var f float64 = 1.8 var t bool = false var z int = 97 var str string // 十進(jìn)制int str = strconv.FormatInt(int64(i), 10) fmt.Printf("str類型為%T,str=%v\n", str, str) //十六進(jìn)制int str = strconv.FormatInt(int64(x), 16) fmt.Printf("str類型為%T,str=%v\n", str, str) //浮點(diǎn)型,f表示格式,3表示位數(shù),64表示轉(zhuǎn)換成float64 str = strconv.FormatFloat(float64(f), 'f', 3, 64) fmt.Printf("str類型為%T,str=%v\n", str, str) //布爾類型 str = strconv.FormatBool(t) fmt.Printf("str類型為%T,str=%v\n", str, str) //string函數(shù)和strconv.itoa區(qū)別 var str1 = strconv.Itoa(z) var str2 = string(z) fmt.Printf("str1類型為%T,str1=%v\n", str1, str1) fmt.Printf("str2類型為%T,str2=%v\n", str2, str2) }
執(zhí)行結(jié)果
str類型為string,str=10
str類型為string,str=3e7
str類型為string,str=1.800
str類型為string,str=false
str1類型為string,str1=97
str2類型為string,str2=a
注意
1、FormatInt參數(shù)可以選擇10進(jìn)制或者16進(jìn)制。
2、FormatFloat參數(shù)可以選擇保留幾位小數(shù)。
3、Itoa方法可以將int轉(zhuǎn)為string,但是string方法會(huì)把數(shù)字轉(zhuǎn)換為ASCII碼值等于該整型數(shù)字的字符。
5、字符串轉(zhuǎn)為基礎(chǔ)類型
使用strconv可以將字符串轉(zhuǎn)化為基礎(chǔ)類型。
樣例代碼如下
//字符串轉(zhuǎn)為基礎(chǔ)類型 func test_string_convert() { var str string = "true" b, _ := strconv.ParseBool(str) fmt.Printf("b類型為%T,b=%v\n", b, b) str = "111" // 默認(rèn)返回int64 i, _ := strconv.ParseInt(str, 10, 64) fmt.Printf("i類型為%T,i=%v\n", i, i) str = "1.908" f, _ := strconv.ParseFloat(str, 64) fmt.Printf("f類型為%T,f=%v\n", f, f) str = "abc" c, c1 := strconv.ParseInt(str, 10, 64) fmt.Printf("c類型為%T,c=%v\n", c, c) fmt.Printf("c1類型為%T,c1=%v\n", c1, c1) }
執(zhí)行結(jié)果
b類型為bool,b=true
i類型為int64,i=111
f類型為float64,f=1.908
c類型為int64,c=0
c1類型為*strconv.NumError,c1=strconv.ParseInt: parsing "abc": invalid syntax
注意
1、":="等于聲明變量加賦值。
2、ParseInt返回的int類型為int64,ParseFloat返回的float類型為float64。
3、返回的值有兩個(gè),如果解析失敗,則范圍該數(shù)據(jù)類型的初始化值,比如:int類型返回0。第二個(gè)值為異常,如果沒(méi)有異常則為空。
到此這篇關(guān)于詳解Go語(yǔ)言中的數(shù)據(jù)類型及類型轉(zhuǎn)換的文章就介紹到這了,更多相關(guān)Go數(shù)據(jù)類型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
gorm整合進(jìn)go-zero的實(shí)現(xiàn)方法
go-zero提供的代碼生成器里面,沒(méi)有提供orm框架操作,但是提供了遍歷的緩存操作,所以可以利用gorm當(dāng)作一個(gè)sql語(yǔ)句的生成器,把生成后的sql語(yǔ)句放到go-zero生成的模板中去執(zhí)行,對(duì)gorm整合進(jìn)go-zero的實(shí)現(xiàn)方法感興趣的朋友一起看看吧2022-03-03Go基礎(chǔ)教程系列之defer、panic和recover詳解
這篇文章主要介紹了Go基礎(chǔ)教程系列之defer、panic和recover,需要的朋友可以參考下2022-04-04深入了解Golang?interface{}的底層原理實(shí)現(xiàn)
在?Go?語(yǔ)言沒(méi)有泛型之前,接口可以作為一種替代實(shí)現(xiàn),也就是萬(wàn)物皆為的?interface。那到底?interface?是怎么設(shè)計(jì)的底層結(jié)構(gòu)呢?下面咱們透過(guò)底層分別看一下這兩種類型的接口原理。感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助2022-10-10golang基礎(chǔ)之Gocurrency并發(fā)
這篇文章主要介紹了golang基礎(chǔ)之Gocurrency并發(fā),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07Golang信號(hào)處理及如何實(shí)現(xiàn)進(jìn)程的優(yōu)雅退出詳解
這篇文章主要給大家介紹了關(guān)于Golang信號(hào)處理及如何實(shí)現(xiàn)進(jìn)程的優(yōu)雅退出的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-03-03