1. 程式人生 > 其它 >從0開始學GO之變數與常量

從0開始學GO之變數與常量

技術標籤:Go 相關gocsdn

文章目錄

更多參見:從0開始學GO之目錄

變數

變數幾乎所有程式語言最基礎的組成元素。從根本上說,變數相當於是對一塊資料儲存空間的命名,程式可以通過定義一個變數來申請一塊資料儲存空間,之後可以通過引用變數名來使用這塊儲存空間。

變數宣告

Go語言引入了關鍵字 var,而型別資訊放在變數名之後,變數宣告語句不需要使用分號作為結束符。

	var v1 string
	var v2 [5]int // 陣列
	var v3 struct {
		s1 int
		s2 string
} var v4 *int // 指標 var v5 map[string]int // map,key為string型別,value為int型別 var v6 func(a int) int //一次定義多個變數 var v7 , v8 int // 同類型 var ( v5 string v6 int )

變數初始化

對於宣告變數時需要進行初始化的場景, var 關鍵字可以保留,但不再是必要的元素

	var v1 int = 10 
	var v2 = 10 // 編譯器自動推匯出v2的型別
	v3 := 10 // 編譯器可以自動推匯出v3的型別
	// 以上三種用法的效果是完全一樣的
	//出現在 := 左側的變數不應該是已經被宣告過
var i int i := 2 //err

變數賦值

	var v1 int
	v1 = 123
	var v2, v3, v4 int
	v2, v3, v4 = 1, 2, 3    //多重賦值

	i := 10
	j := 20
	i, j = j+1, i+1   //多重賦值

多重賦值形式上像Python

匿名變數

_(下劃線)任何賦予它的值都會被丟棄:

package main
import "fmt"

func test() (int, string) {
	return 250, "go"
}

func main() {
	i := 10
j := 20 _, j = j+1, i+1 //多重賦值 fmt.Println(i) fmt.Println(j) var str string _, str = test() fmt.Println(str) }

在這裡插入圖片描述

常量

常量是指編譯期間就已知且不可改變的值。常量可以是數值型別(包括整型、浮點型和複數型別)、布林型別、字串型別等。

字面常量

所謂字面常量(literal),是指程式中硬編碼的常量

-12 
3.14159265358979323846 // 浮點型別的常量
3.2+12i // 複數型別的常量
true // 布林型別的常量
"foo" // 字串常量

常量定義

通過const 關鍵字,進行定義。常量定義可以限定常量型別,但不是必需的。如果定義常量時沒有指定型別,那麼它與字面常量一樣,是無型別常量。

	const Pi float64 = 3.14
	const zero = 0.0 // 無型別浮點常量
	const (
		size int64 = 1024
		eof        = -1 // 整型常量, 自動推導型別
	)
	const a, b, c = 3, 4, "go"
	const mask = 1 << 3

預定義常量

Go語言預定義了這些常量:true、false和iota

常量宣告可以使用iota常量生成器初始化,它用於生成一組以相似規則初始化的常量,但是不用每行都寫一遍初始化表示式。可以被認為是一個可被編譯器修改的常量,在每一個const關鍵字出現時被重置為0,然後在下一個const出現之前,每出現一次iota,其所代表的數字會自動增1。

	const ( // iota被重設為0
		c0 = iota // c0 == 0
		c1 = iota // c1 == 1
		c2 = iota // c2 == 2
	)
	const ( // iota被重設為0
		c3 = iota // c3 == 0
		c4  	 // c4 == 1
		c5 		 // c5 == 2
	)
	const (
		a = 1 << iota // a == 1 (iota在每個const開頭被重設為0)
		b = 1 << iota // b == 2
		c = 1 << iota // c == 4
	)

列舉

列舉指一系列相關的常量。Go語言並不支援眾多其他語言明確支援的enum關鍵字。可以通過 const + iota 進行列舉表示

	const (
		Sunday = iota
		Monday
		Tuesday
		Wednesday
		Thursday
		Friday
		Saturday
		numberOfDays // 這個常量沒有匯出包內私有
	)

以大寫字母開頭的常量在包外可見,以上numberOfDays為包內私有,其他符號則可被其他包訪問。

個人能力有限,如有錯誤或者其他建議,敬請告知歡迎探討,謝謝!