首頁 > 後端開發 > Golang > go語言有什麼資料類型

go語言有什麼資料類型

青灯夜游
發布: 2021-06-07 14:35:29
原創
5262 人瀏覽過

go語言的資料型別有:1、布林型;2、數值型別(可分為整數與浮點型);3、字串型別;4、指標型別;5、陣列型別; 6、結構化類型;7、Channel類型;8、函數類型;9、切片類型;10、介面類型;11、Map類型。

go語言有什麼資料類型

本教學操作環境:windows10系統、GO 1.11.2、Dell G3電腦。

Go 語言是一種靜態類型的程式語言,在 Go 程式語言中,資料類型用於宣告函數和變數。資料類型的出現是為了把數據分成所需內存大小不同的數據,編程的時候需要用大數據的時候才需要申請大內存,就可以充分利用內存。編譯器在進行編譯的時候,就要知道每個值的類型,這樣編譯器就知道要為這個值分配多少內存,並且知道這段分配的內存表示什麼。

基本資料類型說明

##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 到9223372038#5372038byteruneuintptr uintptr類型只有在底層程式設計是才需要,特別是Go語言和C語言函數庫或作業系統介面互動的地方。 float32float64complex64complex128

整數

整數資料分為兩類,有符號無符號兩種型別

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

無符號: uint, uint8, uint16, uint32, uint64, byte
不同位元數的整數差異在於能保存整數數字範圍的大小;

有符號型別可以儲存任何整數,無符號型別只能儲存自然數

int和uint的大小和系統有關,32位元系統表示int32和uint32,如果是64位元系統則表示int64和uint64

byte與uint8類似,一般用來儲存單一字元

#在保證程式正確運作下,盡量使用佔用空間小的資料類型

fmt.Printf("%T", var_name)輸出變數類型

unsafe.Sizeof(var_name)查看變數佔用位元組

浮點型

浮點型也就是小數型,可以存放小數。例如6.6,-12.34

1、關於浮點數在機器中存放形式的簡單說明,浮點數=符號位指數位尾數位

#2、尾數部分可能遺失,造成精度損失。 -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的要準確

說明:如果我們要保存一個精度高的數,則應該選擇float64

3、浮點型的儲存分為三部分:符號位指數位尾數位,在儲存過程中,精確度會有遺失

4、golang的浮點型預設為float64型別

5、通常情況下,應該使用float64,因為它比float32更精確

6、0.123可以簡寫成.123,也支持科學計數法表示:5.1234e2 等價於512.34

字元

Golang中沒有專門的字元型別,如果要儲存單一字元(字母),一般使用byte來儲存。

字串就是一串固定長度的字元連接起來的字元序列。 Go的字串是由單一位元組連接起來的,也就是說對於傳統的字串是由字元組成的,而Go的字串不同,它是由位元組組成的

  • 字元只能被單引號包裹,不能用雙引號,雙引號包裹的是字串
  • 當我們直接輸出type值時,就是輸出了對應字元的ASCII碼值
  • 當我們希望輸出對應字符,需要使用格式化輸出
  • Go語言的字符使用UTF-8編碼,英文字母佔一個字符,漢字佔三個字符
  • 在Go中,字元的本質是一個整數,直接輸出時,是該字元對應的UTF-8編碼的碼值。
  • 可以直接給某個變數賦一個數字,然後按格式化輸出時%c,會輸出該數字對應的unicode字元
  • 字元類型是可以運算的,相當於一個整數,因為它們都有對應的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型別儲存

字元型別本質探討

  • #字元類型儲存到電腦中,需要將字元對應的碼值(整數)找出來

    儲存:字元--> 碼值--> 二進位--> 儲存

    讀取: 二進位-->碼值-->字元--> 讀取

  • 字元和碼值的對應關係是透過字元編碼表決定的(是規定好的)

  • Go語言的編碼都統一成了UTF-8。非常的方便,很統一,再也沒有編碼亂碼的困擾了

布爾型

布爾類型也叫做bool類型,bool類型資料只允許取值true或false

bool型別佔1個位元組

bool型別適用於邏輯運算,一般用於流程控制

字串

#字串就是一串固定長度的字元連接起來的字元序列。 Go的字串是由單一位元組連接起來的。 Go語言的字串的位元組使用UTF-8編碼來識別Unicode文字

1、字串一旦賦值了,就不能修改了:在Go中字串是不可變的。

2、字串的兩個識別形式

  • 雙引號,會辨識轉義字元

    var str = "abc\nabc" //输出时会换行
    登入後複製
  • #反引號,以字串的原生形式輸出,包括換行和特殊字符,可以實現防止攻擊、輸出原始碼等效果

    var str string = `abc\nabc` //输出时原样输出,不会转义
    登入後複製

3、字串拼接方式" "

var str string = "hello " + "world"
str += "!"
登入後複製

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

//正确写法
str := "hello" + 
	" world!"
fmt.Println(str)

//错误写法
str := "hello "
	+ "world!"
fmt.Println(str)
登入後複製

指標

  • 基本資料型,變數存的就是值,也叫值型別

  • 取得變數的位址,用&,例如var num int,取得num的位址:&num

  • 指针类型,指针变量存的是一个地址,这个地址指向的空间存的才是值,比如:var ptr *int = &num

  • 获取指针类型所指向的值,使用:*,比如,var ptr *int,使用*ptr获取ptr指向的值

指针细节说明:

  • 值类型,都有对应的指针类型,形式为*数据类型,比如int对应的指针就是*int,float64对应的指针类型就是*float64,依此类推。

  • 值类型包括:基本数据类型数组结构体struct

值类型与引用类型

值类型和引用类型使用特点:

值类型:变量直接存储值,内存通常在中分配

引用类型:变量存储的是一个地址,这个地址对应的空间才真正存储数据(值),内存通常在上分配,当没有任何变量应用这个地址时,该地址对应的数据空间就成为一个垃圾,由GC来回收。

Golang中值类型和引用类型的区分

  • 值类型:基本数据类型(int系列、float系列、bool、string)、数组和结构体

  • 引用类型:指针、slice切片、map、管道chan、interface等都是引用类型

基本数据类型默认值

在Golang中,数据类型都有一个默认值,当程序员没有赋值时,就会保留默认值,在Golang中,默认值也叫做零值。

基本数据类型默认值如下:

#類型 描述
uint #32位元或64位元
uint8的別名(type byte = uint8)
int32的別名(type rune = int32),表示一個unicode碼
#無符號整數,用來存放一個指標是一種無符號的整數類型,沒有指定特定的bit大小但是足以容納指針。
IEEE-754 32位元浮點型數
#IEEE-754 64位元浮點數型數
32 位元實數與虛數
64位實數和虛數
数据类型默认值
整型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("")
}
登入後複製

推荐学习:Golang教程

以上是go語言有什麼資料類型的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板