您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關(guān)go語言中數(shù)據(jù)類型有哪些,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
go語言的數(shù)據(jù)類型有:1、布爾型;2、數(shù)值類型(可分為整型和浮點型);3、字符串類型;4、指針類型;5、數(shù)組類型;6、結(jié)構(gòu)化類型;7、Channel類型;8、函數(shù)類型;9、切片類型;10、接口類型;11、Map類型。
Go 語言是一種靜態(tài)類型的編程語言,在 Go 編程語言中,數(shù)據(jù)類型用于聲明函數(shù)和變量。數(shù)據(jù)類型的出現(xiàn)是為了把數(shù)據(jù)分成所需內(nèi)存大小不同的數(shù)據(jù),編程的時候需要用大數(shù)據(jù)的時候才需要申請大內(nèi)存,就可以充分利用內(nèi)存。編譯器在進行編譯的時候,就要知道每個值的類型,這樣編譯器就知道要為這個值分配多少內(nèi)存,并且知道這段分配的內(nèi)存表示什么。
類型 | 描述 |
---|---|
uint | 32位或64位 |
uint8 | 無符號 8 位整型 (0 到 255) |
uint16 | 無符號 16 位整型 (0 到 65535) |
uint32 | 無符號 32 位整型 (0 到 4294967295) |
uint64 | 無符號 64 位整型 (0 到 18446744073709551615) |
int | 32位或64位 |
int8 | 有符號 8 位整型 (-128 到 127) |
int16 | 有符號 16 位整型 (-32768 到 32767) |
int32 | 有符號 32 位整型 (-2147483648 到 2147483647) |
int64 | 有符號 64 位整型 (-9223372036854775808 到 9223372036854775807) |
byte | uint8的別名(type byte = uint8) |
rune | int32的別名(type rune = int32),表示一個unicode碼 |
uintptr | 無符號整型,用于存放一個指針是一種無符號的整數(shù)類型,沒有指定具體的bit大小但是足以容納指針。 uintptr類型只有在底層編程是才需要,特別是Go語言和C語言函數(shù)庫或操作系統(tǒng)接口相交互的地方。 |
float32 | IEEE-754 32位浮點型數(shù) |
float64 | IEEE-754 64位浮點型數(shù) |
complex64 | 32 位實數(shù)和虛數(shù) |
complex128 | 64 位實數(shù)和虛數(shù) |
整型數(shù)據(jù)分為兩類,有符號
和無符號
兩種類型
有符號: int, int8, int16, int32, int64
無符號: uint, uint8, uint16, uint32, uint64, byte
不同位數(shù)的整型區(qū)別在于能保存整型數(shù)字范圍的大??;
有符號類型可以存儲任何整數(shù),無符號類型只能存儲自然數(shù)
int和uint的大小和系統(tǒng)有關(guān),32位系統(tǒng)表示int32和uint32,如果是64位系統(tǒng)則表示int64和uint64
byte與uint8類似,一般用來存儲單個字符
在保證程序正確運行下,盡量使用占用空間小的數(shù)據(jù)類型
fmt.Printf("%T", var_name)輸出變量類型
unsafe.Sizeof(var_name)查看變量占用字節(jié)
浮點型也就是小數(shù)類型,可以存放小數(shù)。比如6.6,-12.34
1、關(guān)于浮點數(shù)在機器中存放形式的簡單說明,浮點數(shù)=符號位+指數(shù)位+尾數(shù)位
2、尾數(shù)部分可能丟失,造成精度損失。-123.0000901
package main import "fmt" func main() { var num1 float32 = -123.0000901 var num2 float64 = -123.0000901 fmt.Println("num1 = ", num1, "num2 = ", num2); }
說明:float64的精度要比float32的要準確
說明:如果我們要保存一個精度高的數(shù),則應(yīng)該選擇float64
3、浮點型的存儲分為三部分:符號位+指數(shù)位+尾數(shù)位,在存儲過程中,精度會有丟失
4、golang的浮點型默認為float64類型
5、通常情況下,應(yīng)該使用float64,因為它比float32更精確
6、0.123可以簡寫成.123,也支持科學(xué)計數(shù)法表示:5.1234e2 等價于512.34
Golang中沒有專門的字符類型,如果要存儲單個字符(字母),一般使用byte來保存。
字符串就是一串固定長度的字符連接起來的字符序列。Go的字符串是由單個字節(jié)連接起來的,也就是說對于傳統(tǒng)的字符串是由字符組成的,而Go的字符串不同,它是由字節(jié)組成的。
字符只能被單引號包裹,不能用雙引號,雙引號包裹的是字符串
當我們直接輸出type值時,就是輸出了對應(yīng)字符的ASCII碼值
當我們希望輸出對應(yīng)字符,需要使用格式化輸出
Go語言的字符使用UTF-8編碼,英文字母占一個字符,漢字占三個字符
在Go中,字符的本質(zhì)是一個整數(shù),直接輸出時,是該字符對應(yīng)的UTF-8編碼的碼值。
可以直接給某個變量賦一個數(shù)字,然后按格式化輸出時%c,會輸出該數(shù)字對應(yīng)的unicode字符
字符類型是可以運算的,相當于一個整數(shù),因為它們都有對應(yīng)的unicode碼
package main import "fmt" func main() { //字符只能被單引號包裹,不能用雙引號,雙引號包裹的是字符串 var c1 byte = 'a' var c2 byte = '0' //當我們直接輸出type值時,就是輸出了對應(yīng)字符的ASCII碼值 //'a' ==> 97 fmt.Println(c1, "--", c2) //如果我們希望輸出對應(yīng)字符,需要使用格式化輸出 fmt.Printf("c2 = %c c2 = %c", c1, c2) }
但是如果我們保存的字符大于255,比如存儲漢字,這時byte類型就無法保存,此時可以使用uint或int類型保存
字符型存儲到計算機中,需要將字符對應(yīng)的碼值(整數(shù))找出來
存儲:字符 --> 碼值 --> 二進制 --> 存儲
讀取: 二進制 -->碼值 --> 字符 --> 讀取
字符和碼值的對應(yīng)關(guān)系是通過字符編碼表決定的(是規(guī)定好的)
Go語言的編碼都統(tǒng)一成了UTF-8。非常的方便,很統(tǒng)一,再也沒有編碼亂碼的困擾了
布爾類型也叫做bool類型,bool類型數(shù)據(jù)只允許取值true或false
bool類型占1個字節(jié)
bool類型適用于邏輯運算,一般用于流程控制
字符串就是一串固定長度的字符連接起來的字符序列。Go的字符串是由單個字節(jié)連接起來的。Go語言的字符串的字節(jié)使用UTF-8編碼標識Unicode文本
1、字符串一旦賦值了,就不能修改了:在Go中字符串是不可變的。
2、字符串的兩種標識形式
雙引號,會識別轉(zhuǎn)義字符
var str = "abc\nabc" //輸出時會換行
反引號,以字符串的原生形式輸出,包括換行和特殊字符,可以實現(xiàn)防止攻擊、輸出源代碼等效果
var str string = `abc\nabc` //輸出時原樣輸出,不會轉(zhuǎn)義
3、字符串拼接方式"+"
var str string = "hello " + "world" str += "!"
4、當一行字符串太長時,需要使用到多行字符串,可以使用如下處理
//正確寫法 str := "hello" + " world!" fmt.Println(str) //錯誤寫法 str := "hello " + "world!" fmt.Println(str)
基本數(shù)據(jù)類型,變量存的就是值,也叫值類型
獲取變量的地址,用&,比如var num int,獲取num的地址:&num
指針類型,指針變量存的是一個地址,這個地址指向的空間存的才是值,比如:var ptr *int = &num
獲取指針類型所指向的值,使用:*,比如,var ptr *int,使用*ptr獲取ptr指向的值
指針細節(jié)說明:
值類型,都有對應(yīng)的指針類型,形式為*數(shù)據(jù)類型,比如int對應(yīng)的指針就是*int,float64對應(yīng)的指針類型就是*float64,依此類推。
值類型包括:基本數(shù)據(jù)類型、數(shù)組和結(jié)構(gòu)體struct
值類型和引用類型使用特點:
值類型:變量直接存儲值,內(nèi)存通常在棧中分配
引用類型:變量存儲的是一個地址,這個地址對應(yīng)的空間才真正存儲數(shù)據(jù)(值),內(nèi)存通常在堆上分配,當沒有任何變量應(yīng)用這個地址時,該地址對應(yīng)的數(shù)據(jù)空間就成為一個垃圾,由GC來回收。
Golang中值類型和引用類型的區(qū)分
值類型:基本數(shù)據(jù)類型(int系列、float系列、bool、string)、數(shù)組和結(jié)構(gòu)體
引用類型:指針、slice切片、map、管道chan、interface等都是引用類型
在Golang中,數(shù)據(jù)類型都有一個默認值,當程序員沒有賦值時,就會保留默認值,在Golang中,默認值也叫做零值。
基本數(shù)據(jù)類型默認值如下:
數(shù)據(jù)類型 | 默認值 |
---|---|
整型 | 0 |
浮點型 | 0 |
字符串 | "" |
布爾類型 | false |
package main import "fmt" func main() { var a int var b float32 var isTrue bool var str string //這里的%v,表示按照變量的值輸出 fmt.Printf("a = %v, b = %v, isTrue = %v, str = %v", a, b, isTrue, str) fmt.Println("") }
關(guān)于go語言中數(shù)據(jù)類型有哪些就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。