首頁  >  文章  >  後端開發  >  go語言中變數宣告方法有哪些

go語言中變數宣告方法有哪些

青灯夜游
青灯夜游原創
2023-01-12 10:32:333088瀏覽

變數宣告方法有:1、使用var來宣告一個變量,並指明變數的資料類型,語法「var 變數名稱類型= 表達式」;2、利用「:=」符號進行短變數聲明,語法「變數名:= 表達式」。使用短變數宣告時,可以省去var關鍵字以及型別訊息,變數的預設型別是bool、rune、int、float64、complex128或string。

go語言中變數宣告方法有哪些

本教學操作環境:windows7系統、GO 1.18版本、Dell G3電腦。

學習靜態語言有別於動態語言的一個重要特徵:變數宣告。

程式語言的編譯器或解譯器是如何知道一個變數所能引用的記憶體區域邊界呢?

動態語言和靜態語言有不同的處理方式:

  • 動態語言(例如Python、Ruby 等)的解釋器可以在運行時透過對變數賦值的分析,自動確定變數的邊界。並且在動態語言中,一個變數可以在運行時被賦予大小不同的邊界。

  • 而靜態程式語言在這方面的「體驗略差」。靜態類型語言編譯器必須明確知道一個變量的邊界才允許使用這個變量,但靜態語言編譯器又沒能力自動提供這個信息,這個邊界信息必須由這門語言的使用者提供,於是就有了“變量聲明」。透過變數聲明,語言使用者可以明確告知編譯器一個變數的邊界資訊。在具體實現層面呢,這個邊界資訊由變數的類型屬性賦予。

作為身處靜態程式語言陣營的 Go 語言,它沿襲了靜態語言的這項要求:使用變數之前需要先進行變數宣告。

[golang] 變數宣告和初始化var, :=, new() 和make()

go語言中,提供了多種變數宣告和初始化的方法。這裡著重一一說明。並提供一個簡單的指南。

指南

  • 使用make(),來初始化slicemapchannel
  • 大多數場合,類型明確的場合下,使用短變數宣告方式:=
  • 當使用文字方式初始化一個變量,並且需要指明類型時,使用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, complex128string

	// 短变量声明: 一个整数变量。
	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) 的特性:

    根據型別T分配記憶體
  • 設定記憶體為0
  • 傳回記憶體的指標
  • 	// 初始化一个整数指针变量,指向的值为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只用於初始化

slicemapchannel

	// 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影片教學程式設計教學

以上是go語言中變數宣告方法有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn