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 到9223372038#5372038 |
byte
uint8的別名(type byte = uint8) |
|
rune
int32的別名(type rune = int32),表示一個unicode碼 |
|
uintptr
#無符號整數,用來存放一個指標是一種無符號的整數類型,沒有指定特定的bit大小但是足以容納指針。 | uintptr類型只有在底層程式設計是才需要,特別是Go語言和C語言函數庫或作業系統介面互動的地方。
|
float32
IEEE-754 32位元浮點型數 |
|
float64
#IEEE-754 64位元浮點數型數 |
|
complex64
32 位元實數與虛數 |
|
complex128
64位實數和虛數 |
|
整數
整數資料分為兩類,有符號
和無符號
兩種型別
#有符號: 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、字串的兩個識別形式
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中值类型和引用类型的区分
基本数据类型默认值
在Golang中,数据类型都有一个默认值,当程序员没有赋值时,就会保留默认值,在Golang中,默认值也叫做零值。
基本数据类型默认值如下:
数据类型 | 默认值 |
---|
整型 | 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教程