## 變量
Go 語言變量名由字母、數字、下劃線組成,其中首個字符不能為數字。
聲明變量的一般形式是使用 var 關鍵字,語法如下:
~~~
var identifier type
~~~
可以一次聲明多個變量:
~~~
var identifier1, identifier2 type
~~~
#### 實例1
~~~
package main
import "fmt"
func main() {
var a string = "Hello world"
fmt.Println(a)
var b, c int = 1, 2
fmt.Println(b, c)
}
~~~
執行結果:
Hello world
1 2
## 二、申明變量的方式
#### 第一種
~~~
var v_name v_type
v_name = value
~~~
#### 第二種
~~~
var v_name = value
~~~
#### 第三種
~~~
v_name := value
~~~
#### 多變量聲明
~~~
//類型相同多個變量, 非全局變量
var vname1, vname2, vname3 type
vname1, vname2, vname3 = v1, v2, v3
var vname1, vname2, vname3 = v1, v2, v3 // 和 python 很像,不需要顯示聲明類型,自動推斷
vname1, vname2, vname3 := v1, v2, v3 // 出現在 := 左側的變量不應該是已經被聲明過的,否則會導致編譯錯誤
~~~
## 三、默認值
* 數值類型(包括complex64/128)為**0**
* 布爾類型為**false**
* 字符串為**""**(空字符串)
* 以下幾種類型為**nil**:
~~~
var a *int
var a []int
var a map[string] int
var a chan int
var a func(string) int
var a error // error 是接口
~~~
#### 默認值實例1
~~~
package main
import "fmt"
func main() {
// 聲明一個變量并初始化
var a = "Hello"
fmt.Println(a)
// 沒有初始化就為零值
var b int
fmt.Println(b)
// bool 零值為 false
var c bool
fmt.Println(c)
}
~~~
執行結果:
Hello
0
false
#### 實例2
~~~
package main
import "fmt"
func main() {
var i int
var f float64
var b bool
var s string
fmt.Printf("%v %v %v %q\n", i, f, b, s)
}
~~~
## 四、值類型和引用類型
~~~
package main
import "fmt"
func fun01(a int) {
a = 2
fmt.Println("fun01中傳入的值為:", a)
}
func fun02(a *int) {
*a = 3
fmt.Println("fun02中傳入的值為:", *a)
}
func main() {
var a int = 1
fmt.Println("main中的值第一次打印:", a)
fun01(a)
fmt.Println("main中調用fun01后打印:", a)
fun02(&a)
fmt.Println("main中調用fun02后打印:", a)
}
~~~
打印結果:
main中的值第一次打印: 1
fun01中傳入的值為: 2
main中調用fun01后打印: 1
fun02中傳入的值為: 3
main中調用fun02后打印: 3