Golang變數(來自菜鳥教程,go語言學習筆記)

2021-08-21 09:49:29 字數 3542 閱讀 8715

go 語言變數名由字母、數字、下劃線組成,其中首個字母不能為數字。

宣告變數的一般形式是使用 var 關鍵字:

var

identifier type

第一種,指定變數型別,宣告後若不賦值,使用預設值。

var

v_name string

v_name

=「菜鳥」

第二種,根據值自行判定變數型別。

var

v_name

=「菜鳥」

第三種,省略var, 注意 :=左側的變數不應該是已經宣告過的,否則會導致編譯錯誤。

v_name 

:=「菜鳥」

// 例如

vara

int=

10varb =

10c

:=10

例項如下:

package

main

vara

="菜鳥教程"

varb

string

="runoob.com"

varc

bool

func main

()

以上例項執行結果為:

菜鳥教程

runoob

.com

false

//型別相同多個變數, 非全域性變數

varvname1

,vname2

,vname3 int

vname1

,vname2

,vname3 =1

,2,3

varvname1

,vname2

,vname3 =1

,2,3

//和python很像,不需要顯示宣告型別,自動推斷

vname1

,vname2

,vname3 :=1

,2,3

//出現在:=左側的變數不應該是已經被宣告過的,否則會導致編譯錯誤

// 這種因式分解關鍵字的寫法一般用於宣告全域性變數

var(

vname1 int

vname2 string

)

例項如下:

package

main

varx,y

intvar

(// 這種因式分解關鍵字的寫法一般用於宣告全域性變數

a int

b bool

)varc,

d int=1

,2vare,f

=123

,"hello"

//這種不帶宣告格式的只能在函式體中出現

//g, h := 123, "hello"

func main

()

以上例項執行結果為:

000

false12

123hello

123hello

我們知道可以在變數的初始化時省略變數的型別而由系統自動推斷,宣告語句寫上 var 關鍵字其實是顯得有些多餘了,因此我們可以將它們簡寫為 a := 50 或 b := false。

a 和 b 的型別(int 和 bool)將由編譯器自動推斷。

這是使用變數的首選形式,但是它只能被用在函式體內,而不可以用於全域性變數的宣告與賦值。使用操作符 := 可以高效地建立乙個新的變數,稱之為初始化宣告。

如果在相同的**塊中,我們不可以再次對於相同名稱的變數使用初始化宣告,例如:a := 20 就是不被允許的,編譯器會提示錯誤 no new variables on left side of :=,但是 a = 20 是可以的,因為這是給相同的變數賦予乙個新的值。

如果你在定義變數 a 之前使用它,則會得到編譯錯誤 undefined: a。

如果你宣告了乙個區域性變數卻沒有在相同的**塊中使用它,同樣會得到編譯錯誤,例如下面這個例子當中的變數 a: 

package

main

import

"fmt"

func main

()

嘗試編譯這段**將得到錯誤a declared and not used

此外,單純地給 a 賦值也是不夠的,這個值必須被使用,所以使用

fmt

.println

("hello, world",a

)

會移除錯誤。

但是全域性變數是允許宣告但不使用。 同一型別的多個變數可以宣告在同一行,如: 

vara,

b,c int

多變數可以在同一行進行賦值,如:

vara,

b int

varc

stringa,

b,c =

5,7,

"abc"

上面這行假設了變數 a,b 和 c 都已經被宣告,否則的話應該這樣使用:

a,b

,c :=5

,7,"abc"

右邊的這些值以相同的順序賦值給左邊的變數,所以 a 的值是 5, b 的值是 7,c 的值是 "abc"。

這被稱為 並行 或 同時 賦值。

如果你想要交換兩個變數的值,則可以簡單地使用 a, b = b, a,兩個變數的型別必須是相同。

空白識別符號 _ 也被用於拋棄值,如值 5 在:_, b = 5, 7 中被拋棄。

_ 實際上是乙個只寫變數,你不能得到它的值。這樣做是因為 go 語言中你必須使用所有被宣告的變數,但有時你並不需要使用從乙個函式得到的所有返回值。

並行賦值也被用於當乙個函式返回多個返回值時,比如這裡的 val 和錯誤 err 是通過呼叫 func1 函式同時得到:val, err = func1(var1)。 

多變數賦值時,先計算所有相關值,然後再從左到右依次賦值。

data,

i := [

3]int,

0 i, data[i] =

2, 100

// (i = 0) -> (i = 2), (data[0] = 100)

特殊只寫變數 "_",⽤用於忽略值佔位。

func

test() (

int,

string)

func

main()

編譯器會將未使⽤用的區域性變數當做錯誤。

vars

string

// 全域性變數沒問題。

func

main()

注意重新賦值與定義新同名變數的區別。

s :=

"abc"

println(&s)

s, y :=

"hello",

20// 重新賦值: 與前 s 在同⼀一層次的**塊中,且有新的變數被定義。

println(&s, y)

// 通常函式多返回值 err 會被重複使⽤用。

輸出:

0x2210230f30

0x2210230f30

20 0x2210230f18

30

Go語言學習(一)Go語言變數

總結 此 中需要注意的點是 1 宣告變數時要注意中間的空格不能省略 2 如果 寫的不規範,編譯時會自動調整成規範的格式,比如在編譯前 中的1,2之間沒有空格,但是在編譯後會自動出現 3 在編寫 時,不用每次都刪除hello.exe檔案,因為在編譯main.go檔案時,會自動將其之前的進行覆蓋 第一種...

Go語言學習筆記 變數

變數 使用關鍵字var定義變數,格式為 var 變數名 資料型別 值 對於未初始化的變數,編譯器會自動初始化。go語言支援推斷賦值,即如果給變數提供初始化值,可以省略變數型別。由編譯器自行推斷 go語言支援組賦值 var name string wangyijie 組宣告,賦值 var name w...

Go語言學習(1) 變數

1 宣告變數 go語言引入了關鍵字var,而類資訊放在變數名之後 如 func main 結構體 var k int 指標型別 var o map string int map,key為string型別,value為int型別 var p func a int int 函式,a為引數,int為返回型...