特別注意 : Go 語言中任何導入的包或者創建的變量如果不使用的話,會報錯 ! 所以一旦你導入了某個包或者創建了某個變量就一定要使用, 否則的話會報錯, 編譯也不會通過
一. 變量的快速入門
Go語言是靜態類型語言,因此變量(variable)是有明確類型的,編譯器也會檢查變量類型的正確性
1.1 創建第一個變量
package main
import ("fmt")
func main() {
// 創建變量的第一種方式
var a int
var b int = 10
fmt.Println(a)
fmt.Println(b)
}
// 結果
0
10
需要注意的是,Go語言和許多編程語言不同,它在聲明變量時將變量的類型放在變量的名稱之後。這樣做的好處就是可以避免像C語言中那樣含糊不清的聲明形式,例如:int* a, b;
。其中只有 a 是指針而 b 不是。如果你想要這兩個變量都是指針,則需要將它們分開書寫。而在 Go 中,則可以和輕鬆地將它們都聲明爲指針類型:
二. 創建變量的兩種方式
2.1 標準格式 : 使用 var 創建
package main
import ("fmt")
func main() {
// 創建變量的第一種方式
var a int
// 創建時賦初始值
var b int = 10
// 批量創建
var (
a1 int = 12
a2 string ="aaa"
)
// 創建時讓編譯器自動識別類型
var a3 = 12
fmt.Println(a)
fmt.Println(b)
fmt.Println(a1)
fmt.Println(a2)
fmt.Println(a3)
// 創建變量的第二種方式
}
2.2 簡易格式 : 變量名 := 初始值
package main
import ("fmt")
func main() {
// 創建變量的第二種方式
c := 1
// 同時創建多個變量
d1,d2 := 12,"cc"
fmt.Println(c)
fmt.Println(d1)
fmt.Println(d2)
}
因爲簡潔和靈活的特點,簡短變量聲明被廣泛用於大部分的局部變量的聲明和初始化。var 形式的聲明語句往往是用於需要顯式指定變量類型地方,或者因爲變量稍後會被重新賦值而初始值無關緊要的地方
2.3 Go變量使用注意事項
- 當一個變量被聲明之後,系統自動賦予它該類型的零值:int 爲 0,float 爲 0.0,bool 爲 false,string 爲空字符串,指針爲 nil 等。所有的內存在 Go 中都是經過初始化的。
- 變量的命名規則遵循駱駝命名法,即首個單詞小寫,每個新單詞的首字母大寫,例如:numShips 和 startDate
- 一般使用簡易格式創建變量
2.4 + 號的使用
- 當兩邊都是數值型時, 做加法運算
- 當兩邊是字符串時, 做字符拼接操作
三. 變量的基本類型
3.1 字符類型 string
// 1.string
str := "哈哈哈哈哈"
fmt.Println(str)
就是基本的字符串類型. 注意 : string 是基本類型, 大小默認是 16字節 (不是很確定! ) 在別的語言中 比如 Java中string 並不是一個基本類型, 但是在 GO中 string是基本類型
注意 : 在使用 string 類型的時候, 如果使用 var 定義的時候不賦初值 則默認值是 “” 也就是空字符串
3.2 Bool 類型
這個就是基本的 布爾類型
//2. bool
boolearn := true
fmt.Println(boolearn)
3.3 整數類型
(1) 有符號整數 int
**
Go 語言中沒有 short ,long 類型 , 取而代之的是 int , int8 int16 , int32 , int64 類型
int 默認與 本機的位數是一樣的, 比如我的電腦是 64位的, int 就是 64位也就是 8字節大小的
int8 後面的 8是指 8 位 , 也就是一個字節 大小範圍就是 -128 ~ 127 ,其他以此類推
package main
import (
"fmt"
"math"
"unsafe"
)
func main(){
//3. int 默認與當前主機的位數有關 , 比如我的電腦是 64位的 , 則 int 就是64位的
var i int = math.MaxInt64
// 1個字節的 整數類型, int8 後面的8是指 8位
var i8 int8 = math.MaxInt8
// 2個字節的 整數類型 16指 16位
var i16 int16 = math.MaxInt16
var i32 int32 = math.MaxInt32
var i64 int64 = math.MaxInt64
fmt.Println(i)
fmt.Println(i8)
fmt.Println(i16)
fmt.Println(i32)
fmt.Println(i64)
fmt.Println("int 類型的字節大小 :", unsafe.Sizeof(i))
}
(2) 無符號整數 uint
**
無符號整數所有的位都作爲數值位, 所以沒有負數 , 和 有符號整數相比基本類型, 區別是取值範圍
比如 uint8 類型的數 取值範圍是 0 255 , int8 類型數 取值範圍是 -128 ~ 127
package main
import (
"fmt"
"math"
)
func main(){
var ui uint = math.MaxUint64
var ui8 uint8 = math.MaxUint8
var ui16 uint16 = math.MaxUint16
var ui32 uint32 = math.MaxUint32
var ui64 uint64 = math.MaxUint64
fmt.Println(ui)
fmt.Println(ui8)
fmt.Println(ui16)
fmt.Println(ui32)
fmt.Println(ui64)
}
3.4 整數類型注意事項 [重要]
- Go語言的數值類型分爲以下幾種:整數、浮點數、複數,其中每一種都包含了不同大小的數值類型,例如有符號整數包含 int8、int16、int32、int64 等,每種數值類型都決定了對應的大小範圍和是否支持正負符號。本節我們主要介紹一下整數類型。
- Go語言同時提供了有符號和無符號的整數類型,其中包括 int8、int16、int32 和 int64 四種大小截然不同的有符號整數類型,分別對應 8、16、32、64 bit(二進制位)大小的有符號整數,與此對應的是 uint8、uint16、uint32 和 uint64 四種無符號整數類型。
- 此外還有兩種整數類型 int 和 uint,它們分別對應特定 CPU 平臺的字長(機器字大小),其中 int 表示有符號整數,應用最爲廣泛,uint 表示無符號整數。實際開發中由於編譯器和計算機硬件的不同,int 和 uint 所能表示的整數大小會在 32bit 或 64bit 之間變化。
- 大多數情況下,我們只需要 int 一種整型即可,它可以用於循環計數器(for 循環中控制循環次數的變量)、數組和切片的索引,以及任何通用目的的整型運算符,通常 int 類型的處理速度也是最快的。
- 用來表示 Unicode 字符的 rune 類型和 int32 類型是等價的,通常用於表示一個 Unicode 碼點。這兩個名稱可以互換使用。同樣,byte 和 uint8 也是等價類型,byte 類型一般用於強調數值是一個原始的數據而不是一個小的整數。
-
最後,還有一種無符號的整數類型 uintptr,它沒有指定具體的 bit 大小但是足以容納指針。uintptr 類型只有在底層編程時才需要,特別是Go語言和C語言函數庫或操作系統接口相交互的地方。
-
儘管在某些特定的運行環境下 int、uint 和 uintptr 的大小可能相等,但是它們依然是不同的類型,比如 int 和 int32,雖然 int 類型的大小也可能是 32 bit,但是在需要把 int 類型當做 int32 類型使用的時候必須顯示的對類型進行轉換,反之亦然。
-
Go語言中有符號整數採用 2 的補碼形式表示,也就是最高 bit 位用來表示符號位,一個 n-bit 的有符號數的取值範圍是從 -2****** 到 2********-1。無符號整數的所有 bit 位都用於表示非負數,取值範圍是 0 到 2********。例如,int8 類型整數的取值範圍是從 -128 到 127,而 uint8 類型整數的取值範圍是從 0 到 255。**
3.5 浮點數類型
浮點數類型包括 float32 和 float64 兩種類型
package main
import "fmt"
func main(){
// 1. float32 位 精度爲 6位
var f1 float32 = 0.12
// 浮點數在聲明的時候可以省略整數或者小數部分
// 但是 建議不要這麼寫, 看着彆扭
var f2 float32 = .12
var f3 float32 = 1.
fmt.Println(f1 ," | ", f2 , " | " , f3)
//2. float64 位 精度位 15位
var d1 float64 = 12.2
fmt.Println(d1)
var f float32 = 16777216 // 1 << 24
fmt.Println(f == f+1) // "true"!
///3. 可以使用科學計數法聲明浮點數
var d2 float64 = 3.1415926e13
// 4. 可以像 C 語言那樣指定 打印多少位
fmt.Printf("%.2f" , d2)
}
這些浮點數類型的取值範圍可以從很微小到很巨大。浮點數取值範圍的極限值可以在 math 包中找到:
- 常量 math.MaxFloat32 表示 float32 能取到的最大數值,大約是 3.4e38;
- 常量 math.MaxFloat64 表示 float64 能取到的最大數值,大約是 1.8e308;
- float32 和 float64 能表示的最小值分別爲 1.4e-45 和 4.9e-324。
一個 float32 類型的浮點數可以提供大約 6 個十進制數的精度,而 float64 則可以提供約 15 個十進制數的精度,通常應該優先使用 float64 類型,因爲 float32 類型的累計計算誤差很容易擴散,並且 float32 能精確表示的正整數並不是很大。
var f float32 = 16777216 // 1 << 24
fmt.Println(f == f+1) // "true"!
ads