go 語言變數名由字母、數字、下劃線組成,其中首個字母不能為數字。
宣告變數的一般形式是使用 var 關鍵字:
var第一種,指定變數型別,宣告後若不賦值,使用預設值。identifier type
var第二種,根據值自行判定變數型別。v_name string
v_name
=「菜鳥」
var第三種,省略var, 注意 :=左側的變數不應該是已經宣告過的,否則會導致編譯錯誤。v_name
=「菜鳥」
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
()
000false12
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嘗試編譯這段**將得到錯誤a declared and not used。main
import
"fmt"
func main
()
此外,單純地給 a 賦值也是不夠的,這個值必須被使用,所以使用
fmt會移除錯誤。.println
("hello, world",a
)
但是全域性變數是允許宣告但不使用。 同一型別的多個變數可以宣告在同一行,如:
vara,多變數可以在同一行進行賦值,如:b,c int
vara,上面這行假設了變數 a,b 和 c 都已經被宣告,否則的話應該這樣使用:b int
varc
stringa,
b,c =
5,7,
"abc"
a,b右邊的這些值以相同的順序賦值給左邊的變數,所以 a 的值是 5, b 的值是 7,c 的值是 "abc"。,c :=5
,7,"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為返回型...