這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
GO-LANG學習筆記--基礎文法篇(一)
變數
go語言的變數需要使用var關鍵字顯式聲明,如果給變數賦予了初始值的話,可以不聲明變數類型,go可以自動推導變數的資料類型,如下面的變數s。
var x intvar f float32 = 1.6var s = "abc"
也可以有更簡單的辦法來聲明變數--在同一行聲明多個變數,如下:
var x, f, s = 1, 1.6, "abc";
或者在代碼塊中聲明多個變數,如下:
var ( x int f float = 1.6 s = "123")
在一個函數內部進行變數聲明和賦值時,可以有更簡便的方法:
func test() { x := 123;}
多變數賦值時,程式會先計算所有的相關值後,一次從左至右為變數賦值,如下:
data,i :=[3]int{1,2,3}, 0i,data[i] = 2, 100 //(i = 0) -> (i = 2), (data[0] = 100)
聲明變數時可以唯寫"_",用於佔位,如下:
func test()(int, string) { return 1, "abc"}func main() { _,s :=test() println(s)}
golang 的編輯器會將聲明但是未使用的變數當做錯誤處理,所以不要聲明一些沒用的變數,這樣可以保證代碼的美觀以及程式的效能
var s = "abc" //全域變數聲明不使用沒有問題func main() { i:= 0 //由於變數i聲明未使用,編譯時間會報錯}
需要注意變數的賦值和重新定義的區別,重新定以後變數就是一個全新的指標(c語言中概念),而賦值只是改變了變數的值,如下代碼:
func main() { s:="abc" println(&s) s,s1 :="hello","world" println(&s,s,&s1,s1) { s,s1 := 1000, 30 println(&s,s,&s1,s1) }}
輸出:
0xc82003ff380xc82003ff38 hello 0xc82003ff28 world 0xc82003ff00 1000 0xc82003fef8 30
可以看到上面的變數s,s1的記憶體位址在重新賦值後沒有變化,但是第三行輸出時,記憶體位址發生了變化,這是由於變數s,s1在新的代碼塊中重新聲明了,s和s1已經是全新的變數了,所以記憶體位址就發生了變化。