Golang变量
1. 声明变量
1 var a int 2 var b string 3 var c []float32 4 var d func() bool 5 var e struct{ 6 x int 7 }
2. 变量的几种声明形式
2.1. 标准格式
var 变量名 变量类型
2.2. 批量格式
var ( var a int var b string var c []float32 var d func() bool var e struct{ x int } )
3. 初始化变量
Go语言再声明变量时,自动对变量对应的内存区进行初始化操作。每个变量会初始化其默认值:
- 整型和浮点型变量的默认值为0
- 字符串变量的默认值为空字符串
- 布尔型变量默认为bool
- 切片、函数、指针变量的默认为nil
3.1. 标准格式
var 变量名 类型 = 表达式 例如: var hp int = 100
3.2. 编译器推导式类型的格式
在标准格式基础上,省去int编译器会尝试根据等号右边的表达式推导hp变量的类型。
var hp2 = 100
示例:
package main import "fmt"
var attack = 40 var defence = 20 // damageRate 如果不指定变量类型则为float64 var damageRate float32 = 0.17 var damage = float32(attack-defence) * damageRate func main() { fmt.Println(damage) }
3.3. 短变量声明并初始化
package main import "fmt" func main() { attack := 40 fmt.Println(attack) }
注意:由于使用了" := ",而不是赋值的 " = ",因此推导声明写法的变量必须是没有定义过的变量。
如果hp已经被声明过,但依然使用" := "时编译器会报错,代码如下:
package main import "fmt" func main() { var attack int attack := 40 fmt.Println(attack) }
no new variables on left side of :=
短变量的声明在开噶中的例子较多,比如:
conn, err := net.Dial("tcp","127.0.0.1:8080")
net.Dial 是按照指定协议和地址发起的网络连接,这个函数有两个返回值,一个是连接对象,一个是err对象。如果是标准格式将会变成:
var conn net.Conn var err error conn, err = net.Dial("tcp","127.0.0.1:8080")
在多个短变量声明和赋值中,至少有一个新声明的变量出现在左值中,即使其他变量名可能是重复声明的,编译器也不会报错,代码如下:
conn, err := net.Dial("tcp", "127.0.0.1:8080") conn2, err := net.Dial("tcp", "127.0.0.1:8080")
3.4. 多重赋值
func main() {
var w1, w2 int
w1, w2 = 1, 2
fmt.Println(w1, w2)
}
4. 匿名变量
匿名变量的表现是一个" _ "下划线。匿名变量不占用命名空间,不会分配内存。匿名变量与匿名变量之间也不会因为多次声明而无法使用。
package main
import "fmt"
func GetData() (int, int) {
return 100, 200
}
func main() {
a, _ := GetData()
_, b := GetData()
fmt.Println(a, b)
}
// 代码输出如下:
100 200