Go語言數(shù)據(jù)類型有哪些

這期內容當中小編將會給大家?guī)碛嘘PGo語言數(shù)據(jù)類型有哪些,文章內容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

網(wǎng)站建設哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、小程序制作、集團企業(yè)網(wǎng)站建設等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了克什克騰免費建站歡迎大家使用!

基本數(shù)據(jù)類型說明

類型描述uint32位或64位uint8無符號 8 位整型 (0 到 255)uint16無符號 16 位整型 (0 到 65535)uint32無符號 32 位整型 (0 到 4294967295)uint64無符號 64 位整型 (0 到 18446744073709551615)int32位或64位int8有符號 8 位整型 (-128 到 127)int16有符號 16 位整型 (-32768 到 32767)int32有符號 32 位整型 (-2147483648 到 2147483647)int64有符號 64 位整型 (-9223372036854775808 到 9223372036854775807)byteuint8的別名(type byte = uint8)runeint32的別名(type rune = int32),表示一個unicode碼uintptr無符號整型,用于存放一個指針是一種無符號的整數(shù)類型,沒有指定具體的bit大小但是足以容納指針。
uintptr類型只有在底層編程是才需要,特別是Go語言和C語言函數(shù)庫或操作系統(tǒng)接口相交互的地方。float32IEEE-754 32位浮點型數(shù)float64IEEE-754 64位浮點型數(shù)complex6432 位實數(shù)和虛數(shù)complex12864 位實數(shù)和虛數(shù)

整型

整型數(shù)據(jù)分為兩類,有符號和無符號兩種類型。

有符號:int, int8, int16, int32, int64

無符號:uint, uint8, uint16, uint32, uint64, byte

不同位數(shù)的整型區(qū)別在于能保存整型數(shù)字范圍的大??;

有符號類型可以存儲任何整數(shù),無符號類型只能存儲自然數(shù)

int和uint的大小和系統(tǒng)有關,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

    關于浮點數(shù)在機器中存放形式的簡單說明,浮點數(shù)=符號位+指數(shù)位+尾數(shù)位

    尾數(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ù),則應該選擇float64浮點型的存儲分為三部分:符號位+指數(shù)位+尾數(shù)位,在存儲過程中,精度會有丟失golang的浮點型默認為float64類型通常情況下,應該使用float64,因為它比float32更精確0.123可以簡寫成.123,也支持科學計數(shù)法表示:5.1234e2 等價于512.34

字符

Golang中沒有專門的字符類型,如果要存儲單個字符(字母),一般使用byte來保存。字符串就是一串固定長度的字符連接起來的字符序列。Go的字符串是由單個字節(jié)連接起來的,也就是說對于傳統(tǒng)的字符串是由字符組成的,而Go的字符串不同,它是由字節(jié)組成的。
字符只能被單引號包裹,不能用雙引號,雙引號包裹的是字符串當我們直接輸出type值時,就是輸出了對應字符的ASCII碼值當我們希望輸出對應字符,需要使用格式化輸出Go語言的字符使用UTF-8編碼,英文字母占一個字符,漢字占三個字符在Go中,字符的本質是一個整數(shù),直接輸出時,是該字符對應的UTF-8編碼的碼值。可以直接給某個變量賦一個數(shù)字,然后按格式化輸出時%c,會輸出該數(shù)字對應的unicode字符字符類型是可以運算的,相當于一個整數(shù),因為它們都有對應的unicode碼

package main import "fmt" func main() { //字符只能被單引號包裹,不能用雙引號,雙引號包裹的是字符串 var c1 byte = 'a' var c2 byte = '0' //當我們直接輸出type值時,就是輸出了對應字符的ASCII碼值 //'a' ==> 97  fmt.Println(c1, "--", c2) //如果我們希望輸出對應字符,需要使用格式化輸出  fmt.Printf("c2 = %c c2 = %c", c1, c2) }

但是如果我們保存的字符大于255,比如存儲漢字,這時byte類型就無法保存,此

時可以使用uint或int類型保存

字符類型本質探討

  1. 字符型存儲到計算機中,需要將字符對應的碼值(整數(shù))找出來存儲:字符 --> 碼值 --> 二進制 --> 存儲讀取: 二進制 -->碼值 --> 字符 --> 讀取字符和碼值的對應關系是通過字符編碼表決定的(是規(guī)定好的)Go語言的編碼都統(tǒng)一成了UTF-8。非常的方便,很統(tǒng)一,再也沒有編碼亂碼的困擾了

布爾型

布爾類型也叫做bool類型,bool類型數(shù)據(jù)只允許取值true或falsebool類型占1個字節(jié)bool類型適用于邏輯運算,一般用于流程控制

字符串

字符串就是一串固定長度的字符連接起來的字符序列。Go的字符串是由單個字節(jié)連接起來的。Go語言的字符串的字節(jié)使用UTF-8編碼標識Unicode文本

  1. 字符串一旦賦值了,就不能修改了:

  2. 在Go中字符串是不可變的。
  3. 字符串的兩種標識形式

    • 雙引號,會識別轉義字符

    • var str = "abc\nabc" //輸出時會換行

      反引號,以字符串的原生形式輸出,包括換行和特殊字符,可以實現(xiàn)防止攻擊、輸出源代碼等效果

      var str string = `abc\nabc` //輸出時原樣輸出,不會轉義

      字符串拼接方式"+"

      var str string = "hello " + "world" str += "!"

      當一行字符串太長時,需要使用到多行字符串,可以使用如下處理

      //正確寫法 str := "hello" + " world!" fmt.Println(str) //錯誤寫法 str := "hello "  + "world!" fmt.Println(str)

指針

  1. 基本數(shù)據(jù)類型,變量存的就是值,也叫值類型獲取變量的地址,用&,比如var num int,獲取num的地址:&num指針類型,指針變量存的是一個地址,這個地址指向的空間存的才是值,比如:var ptr *int = &num獲取指針類型所指向的值,使用:*,比如,var ptr *int,使用*ptr獲取ptr指向的值

指針細節(jié)說明:

  1. 值類型,都有對應的指針類型,形式為

  2. *數(shù)據(jù)類型
  3. ,比如int對應的指針就是*int,float64對應的指針類型就是*float64,依此類推。值類型包括:

  4. 基本數(shù)據(jù)類型
  5. 、

  6. 數(shù)組
  7. 結構體struct

值類型與引用類型

值類型和引用類型使用特點:值類型:變量直接存儲值,內存通常在中分配引用類型:變量存儲的是一個地址,這個地址對應的空間才真正存儲數(shù)據(jù)(值),內存通常在上分配,當沒有任何變量應用這個地址時,該地址對應的數(shù)據(jù)空間就成為一個垃圾,由GC來回收。Golang中值類型和引用類型的區(qū)分

  1. 值類型:基本數(shù)據(jù)類型(int系列、float系列、bool、string)、數(shù)組和結構體引用類型:指針、slice切片、map、管道chan、interface等都是引用類型

基本數(shù)據(jù)類型默認值

在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("") }

基本數(shù)據(jù)類型相互轉換

Golang和Java/C不同,Golang在不同類型的變量之間賦值時需要顯式轉換。也就是Golang中數(shù)據(jù)類型不能自動轉換?;菊Z法:表達式var_type(var_name) 將值v轉換為類型var_typevar_type:就是數(shù)據(jù)類型,比如int32, int64, float32等等var_name:就是需要轉換的變量

var num int = 42 var float float64 = float64(num) var ui uint8 = uint8(float) fmt.Println(num, float, ui)

注意事項

  1. Go中,數(shù)據(jù)類型的轉換可以是從表示范圍小-->表示范圍大,也可以 范圍大—>范圍小被轉換的是

  2. 變量存儲的數(shù)據(jù)
  3. (即值),變量本身的數(shù)據(jù)類型并沒有變化!在轉換中,比如將int64轉成int8,編譯時不會報錯,只是轉換的結果是按溢出處理,和我們希望的結果不一樣。數(shù)據(jù)的轉換必須顯式轉換,不能自動轉換

  4. package main import "fmt" func main() { var n1 int32 = 12 var n2 int64 var n3 int8  n2 = n1 + 20 //int32  --> int64  錯誤  n3 = n1 + 20 //int32  --> int8   錯誤  n2 = int64(n1) + 20 //正確  n3 = int8(n1) + 20 //正確 }

    定義一個int8類型的整數(shù)(var num int8 = 0),如果一直自加1,這個變量的值會是(0...127 -128 -127... 0 ...127)循環(huán)往復下去,而不會超過類型最大值的范圍

其他基本類型轉string類型

在程序開發(fā)中,我們經常需要將數(shù)值型轉成string類型,或者將string類型轉成數(shù)值

型。

方式1:

func Sprintf(format string, a ...interface{}) string

Sprintf根據(jù)format參數(shù)生成格式化的字符串并返回該字符串。

package main import "fmt" func main() { var num1 int = 99; var num2 float64 = 23.456 var isTrue bool = true var char byte = 'A' var str string  str = fmt.Sprintf("%d", num1)  fmt.Printf("str類型為 %T str = %q\n",str, str)  str = fmt.Sprintf("%f", num2)  fmt.Printf("str類型為 %T str = %q\n",str, str)  str = fmt.Sprintf("%t", isTrue)  fmt.Printf("str類型為 %T str = %q\n",str, str)  str = fmt.Sprintf("%d", char)  fmt.Printf("str類型為 %T str = %q\n",str, str) }

輸出結果為

str類型為 string str = "99" str類型為 string str = "23.456000" str類型為 string str = "true" str類型為 string str = "65"

方式2:使用strconv包的函數(shù)

package main import ( "fmt" "strconv" ) func main() { var num1 int = 99; var num2 float64 = 23.456 var isTrue bool = true var str string  str = strconv.FormatInt(int64(num1), 10)  str = strconv.Itoa(num1)  fmt.Printf("str類型為 %T str = %q\n",str, str)  str = strconv.FormatFloat(num2, 'f', 10, 64)  fmt.Printf("str類型為 %T str = %q\n",str, str)  str = strconv.FormatBool(isTrue)  fmt.Printf("str類型為 %T str = %q\n",str, str) }

輸出結果為

str類型為 string str = "99" str類型為 string str = "23.4560000000" str類型為 string str = "true"

string類型轉其他基本類型

方式1:使用strconv包的函數(shù)

package main import ( "fmt" "strconv" ) func main() { var str string = "true" var str1 string = "123456" var str2 string = "123.456" var isTrue bool var num int64 var num2 float64  isTrue, _ = strconv.ParseBool(str)  fmt.Printf("str類型為 %T str = %v\n",isTrue, isTrue)  num, _ = strconv.ParseInt(str1, 10, 64)  fmt.Printf("str類型為 %T str = %v\n",num, num)  num2, _ = strconv.ParseFloat(str2, 64)  fmt.Printf("str類型為 %T str = %v\n",num2, num2) }

數(shù)據(jù)結果為:

str類型為 bool str = true str類型為 int64 str = 123456 str類型為 float64 str = 123.456

注意:在將string類型轉成其它基本數(shù)據(jù)類型時,要確保string類型能夠轉成有效的數(shù)據(jù)。比如,我們可以把”123“轉成數(shù)字123,但是不能把”hello“轉成一個整數(shù),如果這樣做,Golang直接將其轉成0,其它類型也是一樣的道理,float => 0, bool=>false

上述就是小編為大家分享的Go語言數(shù)據(jù)類型有哪些了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

當前文章:Go語言數(shù)據(jù)類型有哪些
本文鏈接:http://bm7419.com/article20/psdjco.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設、Google、做網(wǎng)站、網(wǎng)站設計公司、App設計、軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務器托管