天天看點

Go的基本資料類型入門看這一篇就差不多了

一開始直接上圖,直覺的看下基本資料類型

整型

表格表示

類型 有無符号 占用的存儲空間 數值範圍 描述
int8 1位元組 -128 ~ 127
int16 2位元組 -32768 ~ 32767
int32 4位元組 -2147483648 ~ 2147483647
int64 8位元組 -9223372036854775808 ~ 9223372036854775807
int 32位系統4位元組 64位系統8位元組 32位系統看int32 64位系統看int64
byte 1位元組,與int8等價 0 ~ 255 byte也用來存儲字元
rune 4位元組 同int32 相當于 Unicode下的 int32
uint8 1位元組 0 ~ 255
uint16 2位元組 0 ~ 65535
uint32 4位元組 0 ~ 4294967295

用"math"包中的常量列印出整型的範圍

官方文檔的截圖

Go的基本資料類型入門看這一篇就差不多了

示例代碼

package main

import (
	"fmt"
	"math"
)

func main(){

	fmt.Println("int8 min = ", math.MinInt8, " int8 max = ", math.MaxInt8)
	fmt.Println("int16 min = ", math.MinInt16, " int16 max = ", math.MaxInt16)
	fmt.Println("int32 min = ", math.MinInt32, " int32 max = ", math.MaxInt32)
	fmt.Println("int64 min = ", math.MinInt64, " int64 max = ", math.MaxInt64)

	fmt.Println("Uint8 max = ", math.MaxUint8)
	fmt.Println("Uint16 max = ", math.MaxUint16)
	fmt.Println("Uint32 max = ", math.MaxUint32)
	//fmt.Println(" Uint64 max = ", math.MaxUint64)	
}
           
Go的基本資料類型入門看這一篇就差不多了

在官方文檔中,Uint64是有的,但是在我本機中,我列印就溢出,是以這個還需要你們在這裡的電腦中測試一下,是否能列印處理來

用"unsafe"包列印整型的存儲大小

官方文檔的截圖

Go的基本資料類型入門看這一篇就差不多了

示例代碼

package main

import (
	"fmt"
	"unsafe"
)

func main(){

	var sizeofInt8 int8
	var sizeofInt16 int16
	var sizeofInt32 int32
	var sizeofInt64 int64
	fmt.Println("int8 所占的位元組數 = ", unsafe.Sizeof(sizeofInt8))
	fmt.Println("int16 所占的位元組數 = ", unsafe.Sizeof(sizeofInt16))
	fmt.Println("int32 所占的位元組數 = ", unsafe.Sizeof(sizeofInt32))
	fmt.Println("int64 所占的位元組數 = ", unsafe.Sizeof(sizeofInt64))

	var sizeofint int
	fmt.Println("int 所占的位元組數 = ", unsafe.Sizeof(sizeofint))

	var sizeofUint8 uint8
	var sizeofUint16 uint16
	var sizeofUint32 uint32
	var sizeofUint64 uint64
	fmt.Println("Uint8 所占的位元組數 = ", unsafe.Sizeof(sizeofUint8))
	fmt.Println("Uint16 所占的位元組數 = ", unsafe.Sizeof(sizeofUint16))
	fmt.Println("Uint32 所占的位元組數 = ", unsafe.Sizeof(sizeofUint32))
	fmt.Println("Uint64 所占的位元組數 = ", unsafe.Sizeof(sizeofUint64))	
}
           
Go的基本資料類型入門看這一篇就差不多了

在這裡,因為我用的是64位的筆記本,是以int 列印的是8個位元組

用"fmt"包的 Printf 格式化輸出整型的預設值

官方文檔的截圖

Go的基本資料類型入門看這一篇就差不多了

示例代碼

package main

import (
	"fmt"
)

func main(){

	var defaultValueInt8 int8
	var defaultValueInt16 int16
	var defaultValueInt32 int32
	var defaultValueInt64 int64
	fmt.Printf("int8 的預設值是 = %v\n", defaultValueInt8)
	fmt.Printf("int16 的預設值是 = %v\n", defaultValueInt16)
	fmt.Printf("int32 的預設值是 = %v\n", defaultValueInt32)
	fmt.Printf("int64 的預設值是 = %v\n",defaultValueInt64)

	var defaultValueint int
	fmt.Printf("int 的預設值是 = %v\n", defaultValueint)

	var defaultValueUint8 uint8
	var defaultValueUint16 uint16
	var defaultValueUint32 uint32
	var defaultValueUint64 uint64
	fmt.Printf("Uint8 的預設值是 = %v\n", defaultValueUint8)
	fmt.Printf("Uint16 的預設值是 = %v\n", defaultValueUint16)
	fmt.Printf("Uint32 的預設值是 = %v\n", defaultValueUint32)
	fmt.Printf("Uint64 的預設值是 = %v\n", defaultValueUint64)	
}
           
Go的基本資料類型入門看這一篇就差不多了

浮點型

類型 占用的存儲空間 取值範圍 描述
float32 4位元組 單精度
float64 8位元組 雙精度

這裡說的精度,表示的是小數點後,能顯示的位數精确到哪幾位

官方文檔的截圖

這是列印 float 範圍的常量

Go的基本資料類型入門看這一篇就差不多了

示例代碼

package main

import (
	"fmt"
	"math"
	"unsafe"
)

func main(){

	//列印 float 的取值範圍
	fmt.Println("float32的最小值 = ",math.SmallestNonzeroFloat32," 最大值為 = ", math.MaxFloat32)
	fmt.Println("float64的最小值 = ",math.SmallestNonzeroFloat64," 最大值為 = ", math.MaxFloat64)

	//列印 float 所占存儲空間的大小
	var sizeoffloat32 float32
	var sizeoffloat64 float64
	fmt.Println("float32所占的存儲空間為:",unsafe.Sizeof(sizeoffloat32))
	fmt.Println("float64所占的存儲空間為:",unsafe.Sizeof(sizeoffloat64))

	//列印 float 的預設值
	fmt.Printf("float32的預設值為:%v\n", sizeoffloat32)
	fmt.Printf("float64的預設值為:%v\n", sizeoffloat64)
}
           
Go的基本資料類型入門看這一篇就差不多了

我把取值範圍,所占存儲空間大小,預設值都寫在同一個檔案中,你可以把代碼複制進編譯器運作一遍,至于裡面用到的一些包和方法,上面有截圖,你可以去上面看一下

上面列印出來的取值範圍用的是**科學計數法**

Go浮點型指派的時候

0.123 是可以等價為 .123,隻有小數點前為0可以使用
           

字元型

字元型跟别的程式設計語言不一樣,這裡的字元不是用的char來存儲,用的是byte來存儲,而且存儲的範圍隻有 -128 ~ 127,存儲的是**ASCII表**所展示的内容

示例代碼

package main

import (
	"fmt"
	"unsafe"
)

func main(){

	var sizeofByte byte
	//列印出byte的存儲大小
	fmt.Println("byte所占的存儲空間為:", unsafe.Sizeof(sizeofByte))

	//列印出byte的預設值
	fmt.Printf("byte的預設值為:%q", sizeofByte)
}
           
Go的基本資料類型入門看這一篇就差不多了

這裡的 %q,是可以把原本基本類型的格式也列印出來(個人了解)

Go的基本資料類型入門看這一篇就差不多了

如果我們各種情況列印字元的話,那會是什麼情形?

package main

import (
	"fmt"
)

func main(){

	var testByte byte = 'a'

	//列印 testByte的值,不用格式化輸出
	fmt.Println("testByte不是格式化輸出的值為:", testByte)

	//列印 testByte的值,用格式化輸出
	fmt.Printf("testByte格式化輸出的值為:%c\n", testByte)

	var testByte2 byte 
	//用 %q格式化列印 testByte2的值
	fmt.Printf("testByte2的值為:%q\n", testByte2)

	//用 %c格式化列印 testByte2的值
	fmt.Printf("testByte2的值為:%c\n", testByte2)
}
           
Go的基本資料類型入門看這一篇就差不多了

第一個輸出,是輸出字元在 ASCII中十進制的表示,a的十進制是97

第二個用格式化輸出,用的%c,是輸出了相應的Unicode代碼表示的字元

第三個和第四個輸出的是byte的預設值,但是兩者有不同的差別,用%q有把 ‘’ 也給輸出了,但是%c沒有

思考題:因為 byte隻能存儲一個位元組,而漢字一般占用的是3-4個位元組,那麼該用什麼來存儲?

package main

import (
	"fmt"
)

func main(){

	var testA int = '帥'
	fmt.Println("testA的值為:", testA)

	fmt.Printf("testA用格式化輸出:%c", testA)

}
           
Go的基本資料類型入門看這一篇就差不多了

答案是用整型來接收,byte實質上等于int8,而且存儲在計算機時,計算機不是存儲的字元,而是字元所代表的ASCII表的十進制的數字,那用整型就可以存儲更大的漢字了,因為最後在計算機也是存儲的是數字

布爾類型

布爾類型也是叫 bool類型,它隻有兩個值,true或者是false

bool隻占存儲空間的1個位元組

示例代碼

package main

import (
	"fmt"
	"unsafe"
)

func main(){

	var testbool bool 
	fmt.Println("testbool的預設值是:", testbool)

	fmt.Println("testbool所占存儲空間的大小是:", unsafe.Sizeof(testbool))

}
           
Go的基本資料類型入門看這一篇就差不多了

補充:bool常用于循環、條件語句中

字元串

示例代碼

在上面的字元那裡,我們每次隻能寫一個字元,而字元串可以讓你,一次性多寫很多個字元

package main

import (
	"fmt"
	"unsafe"
)

func main(){

	var testString string  
	fmt.Println("testString的預設值是:", testString)

	fmt.Println("testString所占存儲空間的大小是:", unsafe.Sizeof(testString))

	fmt.Printf("testString的預設值是,用格式化輸出:%s\n", testString)

	fmt.Printf("testString的預設值是,用格式化輸出:%q", testString)
}
           
Go的基本資料類型入門看這一篇就差不多了

在上面,string 預設的大小是16個位元組,而我們格式化輸出 %s,是說直接輸出這個字元串内容,但是由于我們沒有指派,它預設是空,是以輸出空白,但我們用了%q去輸出内容,輸出了雙引号,輸出了它的格式""

有個需要注意的點:字元串一經建立,就不能修改

字元串拼接

package main

import (
	"fmt"
)

func main(){

	var hello string = "hello"
	var world string = " world"

	var helloworld string = hello + world

	fmt.Println(helloworld)

}
           

輸出的是:hello world

有個注意點:如果有多個字元串拼接,如果太長了,你要換行,需要把 + 号,放在前一個字元串的後面,而不能連 + 号也換行了,不然會報錯

Go的基本資料類型入門看這一篇就差不多了
Go的基本資料類型入門看這一篇就差不多了

解釋:因為Go語言中,執行代碼的時候,在你不添加 ;分号的時候,換行就等于是新的語句了,而上面的代碼,Go會隐式的給你加上 ;分号

歡迎大家關注下個人的「公衆号」:獨醉貪歡

Go的基本資料類型入門看這一篇就差不多了