變數宣告方法有:1、使用var來宣告一個變量,並指明變數的資料類型,語法「var 變數名稱類型= 表達式」;2、利用「:=」符號進行短變數聲明,語法「變數名:= 表達式」。使用短變數宣告時,可以省去var關鍵字以及型別訊息,變數的預設型別是bool、rune、int、float64、complex128或string。
本教學操作環境:windows7系統、GO 1.18版本、Dell G3電腦。
學習靜態語言有別於動態語言的一個重要特徵:變數宣告。
程式語言的編譯器或解譯器是如何知道一個變數所能引用的記憶體區域邊界呢?
動態語言和靜態語言有不同的處理方式:
動態語言(例如Python、Ruby 等)的解釋器可以在運行時透過對變數賦值的分析,自動確定變數的邊界。並且在動態語言中,一個變數可以在運行時被賦予大小不同的邊界。
而靜態程式語言在這方面的「體驗略差」。靜態類型語言編譯器必須明確知道一個變量的邊界才允許使用這個變量,但靜態語言編譯器又沒能力自動提供這個信息,這個邊界信息必須由這門語言的使用者提供,於是就有了“變量聲明」。透過變數聲明,語言使用者可以明確告知編譯器一個變數的邊界資訊。在具體實現層面呢,這個邊界資訊由變數的類型屬性賦予。
作為身處靜態程式語言陣營的 Go 語言,它沿襲了靜態語言的這項要求:使用變數之前需要先進行變數宣告。
go語言中,提供了多種變數宣告和初始化的方法。這裡著重一一說明。並提供一個簡單的指南。
指南
make()
,來初始化slice
,map
和channel
。 :=
。 var
變數宣告方式。 new()
,除非你需要一個指標變數。 變數宣告方式
go語言可以使用var
來宣告一個變量,並指明變數的資料類型。
// 初始化整数变量,值为10。 var v int = 10 fmt.Println(v) // 输出: 10 // 变量声明: 一个slice变量 var vSlice []int = []int{1, 2, 3, 4} fmt.Println(vSlice, "type: ", reflect.TypeOf(vSlice).Kind()) // 输出: [1 2 3 4] type: slice // 短变量声明: 一个map变量,指向的值为[] var vMap map[string]int = map[string]int{ "a": 1, "b": 2, } fmt.Println(vMap) // 输出: map[a:1 b:2]
短變數宣告方式
short variable declarations 符號: :=
。
短變數宣告時,變數的預設型別是: bool
, rune
, int
, float64
, complex128
或 string
// 短变量声明: 一个整数变量。 sdvInt := 10 fmt.Println(sdvInt, "type: ", reflect.TypeOf(sdvInt).Kind()) // 输出: 10 type: int // 短变量声明: 一个slice变量 sdvSlice := []int{1, 2, 3, 4} fmt.Println(sdvSlice, "type: ", reflect.TypeOf(sdvSlice).Kind()) // 输出: [1 2 3 4] type: slice // 短变量声明: 一个map变量,指向的值为[] sdvMap := map[string]int{ "a": 1, "b": 2, } fmt.Println(sdvMap) // 输出: map[a:1 b:2]
#new(T)
##new(T) 的特性:
// 初始化一个整数指针变量,指向的值为0 var i3 *int = new(int) fmt.Println(*i3) // 初始化一个slice指针变量 var i4 = new([10]int)[0:5] fmt.Println(i4, "type: ", reflect.TypeOf(i4).Kind()) // 输出: [0 0 0 0 0] type: slice // 初始化一个map指针变量,指向的值为[] var i5 *map[string]int = new(map[string]int) fmt.Println(*i5) // 输出: map[] // 初始化一个chan指针变量,指向的值为nil var i6 *chan int = new(chan int) fmt.Println(*i6) // 输出: nil
make()
make只用於初始化slice,
map 和
channel。
// make只能用于创建slice, map, channel // 切片类型(slice) makeSlice := make([]int, 5, 10) fmt.Println(makeSlice) // 输出: [0 0 0 0 0] // Map 类型 var makeMap map[string]int = make(map[string]int) fmt.Println(makeMap) // 输出: map[] // Channel 类型 var makeChan chan int32 = make(chan int32, 100) fmt.Println(makeChan) // 输出: 0xc000112000
完整原始碼
package main import ( "fmt" "reflect" ) func main() { // 初始化整数变量,值为10。 var v int = 10 fmt.Println(v) // 输出: 10 // 变量声明: 一个slice变量 var vSlice []int = []int{1, 2, 3, 4} fmt.Println(vSlice, "type: ", reflect.TypeOf(vSlice).Kind()) // 输出: [1 2 3 4] type: slice // 短变量声明: 一个map变量,指向的值为[] var vMap map[string]int = map[string]int{ "a": 1, "b": 2, } fmt.Println(vMap) // 输出: map[a:1 b:2] // 短变量声明: 一个整数变量。 sdvInt := 10 fmt.Println(sdvInt, "type: ", reflect.TypeOf(sdvInt).Kind()) // 输出: 10 type: int // 短变量声明: 一个slice变量 sdvSlice := []int{1, 2, 3, 4} fmt.Println(sdvSlice, "type: ", reflect.TypeOf(sdvSlice).Kind()) // 输出: [1 2 3 4] type: slice // 短变量声明: 一个map变量,指向的值为[] sdvMap := map[string]int{ "a": 1, "b": 2, } fmt.Println(sdvMap) // 输出: map[a:1 b:2] // 初始化一个整数指针变量,指向的值为0 var newInt *int = new(int) fmt.Println(*newInt) // 初始化一个slice指针变量 var newSlice = new([10]int)[0:5] fmt.Println(newSlice, "type: ", reflect.TypeOf(newSlice).Kind()) // 输出: [0 0 0 0 0] type: slice // 初始化一个map指针变量,指向的值为[] var newMap *map[string]int = new(map[string]int) fmt.Println(*newMap) // 输出: map[] // 初始化一个chan指针变量,指向的值为nil var newChan *chan int = new(chan int) fmt.Println(*newChan) // 输出: nil // make只能用于创建slice, map, channel // 切片类型(slice) makeSlice := make([]int, 5, 10) fmt.Println(makeSlice) // 输出: [0 0 0 0 0] // Map 类型 var makeMap map[string]int = make(map[string]int) fmt.Println(makeMap) // 输出: map[] // Channel 类型 var makeChan chan int32 = make(chan int32, 100) fmt.Println(makeChan) // 输出: 0xc000112000 }【相關推薦:
以上是go語言中變數宣告方法有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!