Go 語言基礎——變數常量的定義
go語言不支援隱式型別轉換,別名和原有型別也不能進行隱式型別轉換
go語言不支援隱式轉換
變數
變數宣告
var v1 int
var v2 string
var v3 [10]int // 陣列
var v4 []int // 陣列切片
var v5 struct { //定義結構體(Java中的實體類,自定義型別)
f int
}
var v6 *int // 指標
var v7 map[string] int // map,key為string型別,value為int型別
var v8 func(a int) int
//也可以這樣宣告變數
var (
v1 int
v2 string
) 複製程式碼
宣告變數不需要使用分號作為結束符
變數的初始化
var v1 int = 10 // 定義並賦值
var v2 = 10 // 編譯器可以自動推匯出v2的型別
v3 := 10 // 編譯器可以自動推匯出v3的型別 複製程式碼
冒號和等號的組合:= 宣告並賦值
出現在:=左側的變數不應該是已經被宣告過的,否則會導致編譯錯誤
var a int
a := 2
會導致類似如下的編譯錯誤:no new variables on left side of :=
變數的賦值
var v10 int #定義變數
v10 = 1 #變數賦值複製程式碼
go語言提供多重賦值功能,比如下面這個交換i和j變數的語句:i,j = j,i
在不支援多重賦值的語言中,互動兩個變數的內容需要引入一箇中間變數:t = i; i = j; j = t;
匿名變數
我們在使用傳統的強型別語言程式設計時,經常會出現這種情況,即在呼叫函式時為了獲取一個 值,卻因為該函式返回多個值而不得不定義一堆沒用的變數。在Go中這種情況可以通過結合使 用多重返回和匿名變數來避免這種醜陋的寫法,讓程式碼看起來更加優雅。
假設GetName()函式的定義如下,它返回3個值,分別為firstName、lastName和 nickName:
func GetName() (firstName,lastName,nickName string) {
return "May","Chan","Chibi Maruko"
} 複製程式碼
若只想獲得nickName,則函式呼叫語句可以用如下方式編寫:,,nickName := GetName()
這種用法可以讓程式碼非常清晰,基本上遮蔽掉了可能混淆程式碼閱讀者視線的內容,從而大幅 降低溝通的複雜度和程式碼維護的難度。
常量
常量是指編譯期間就已知且不可改變的值。常量可以是數值型別(包括整型、 浮點型和複數型別)、布林型別、字串型別等。
字面常量
程式中硬編碼的常量
-12
3.14159265358979323846 // 浮點型別的常量
3.2+12i // 複數型別的常量
true // 布林型別的常量
"foo" // 字串常量 複製程式碼
Go語言的字面常量更接近我們自然語言中的常量概念,它是無型別的。只要這個常量在相應型別的值域 範圍內,就可以作為該型別的常量
常量定義
通過關鍵字const定義常量
const Pi float64 = 3.14159265358979323846
const zero = 0.0 // 無型別浮點常量
const (
size int64 = 1024
eof = -1 // 無型別整型常量
)
const u,v float32 = 0,3 // u = 0.0,v = 3.0,常量的多重賦值
const a,b,c = 3,4,"foo" // a = 3,b = 4,c = "foo",無型別整型和字串常量
//常量賦值是一個編譯期行為,所以右值也可以是一個在編譯期運算的常量表達式:
const s = 1000 * 60複製程式碼
預定義常量
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 (
u = iota * 42 // u == 0
v float64 = iota * 42 // v == 42.0
)複製程式碼
碼字不易如果對你有幫助請給個關注
愛技術愛生活 QQ群: 894109590