中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

go語言中變量怎么聲明

發布時間:2023-01-14 10:15:45 來源:億速云 閱讀:79 作者:iii 欄目:編程語言

今天小編給大家分享一下go語言中變量怎么聲明的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

變量聲明方法有:1、使用var來聲明一個變量,并指明變量的數據類型,語法“var 變量名 類型 = 表達式”;2、利用“:=”符進行短變量聲明,語法“變量名 := 表達式”。使用短變量聲明時,可以省去var關鍵字以及類型信息,變量的默認類型是bool、rune、int、float64、complex128或string。

學習靜態語言有別于動態語言的一個重要特征:變量聲明。

編程語言的編譯器或解釋器是如何知道一個變量所能引用的內存區域邊界呢?

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

  • 動態語言(比如 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, complex128 or 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)的特點:

  • 根據類型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語言中變量怎么聲明”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平舆县| 四平市| 沾化县| 藁城市| 阿克| 夏津县| 康保县| 璧山县| 潜山县| 曲松县| 玉田县| 阜阳市| 美姑县| 丰台区| 尤溪县| 越西县| 犍为县| 涿鹿县| 铁力市| 奉新县| 嘉禾县| 晋宁县| 临沧市| 云南省| 宜昌市| 利辛县| 灯塔市| 道真| 岳池县| 内黄县| 永安市| 乌鲁木齐市| 呼伦贝尔市| 竹北市| 宁津县| 辽宁省| 从化市| 图木舒克市| 监利县| 罗城| 奉贤区|