## 变量
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