变量
变量是包含临时处理数据的数据的存储片段。
在Golang中声明变量的最通用形式使用var关键字、显式类型和赋值。
var name type = expression
带初始化的声明
如果您事先知道变量的值是多少,则可以声明变量并在同一行上为它们赋值。
package main
import "fmt"
func main() {
var i int = 10
var s string = "Canada"
fmt.Println(i)
fmt.Println(s)
}
不带初始化的声明
关键字var用于声明变量,后跟所需的名称和变量将包含的值类型。
package main
import "fmt"
func main() {
var i int
var s string
i = 10
s = "Canada"
fmt.Println(i)
fmt.Println(s)
}
执行上述语句后,变量i将保存值10,变量s将保存值Canada。
使用类型推断的声明
在声明时为变量赋值时,可以从声明中省略变量类型。分配给变量的值的类型将用作该变量的类型。
package main
import (
"fmt"
"reflect"
)
func main() {
var i = 10
var s = "Canada"
fmt.Println(reflect.TypeOf(i))
fmt.Println(reflect.TypeOf(s))
}
多个变量的声明
Golang允许您在一行中为多个变量赋值。
package main
import (
"fmt"
)
func main() {
var fname, lname string = "John", "Doe"
m, n, o := 1, 2, 3
item, price := "Mobile", 2000
fmt.Println(fname + lname)
fmt.Println(m + n + o)
fmt.Println(item, "-", price)
}
Golang的短变量声明
:= 短变量赋值运算符指示正在使用短变量声明。无需使用var关键字或声明变量类型。
package main
import (
"fmt"
"reflect"
)
func main() {
name := "John Doe"
fmt.Println(reflect.TypeOf(name))
}
John Doe 字符串文本将分配给名称。
由大括号定义的Golang变量的范围
在Go语言中,变量的作用域是指可访问变量的代码区域。变量的作用域由声明变量的位置决定。
在块内声明的变量(例如,在函数或控制结构中,例如if, for或switch)只能在该块和任何嵌套块内访问。一旦执行离开块,变量就会超出范围,无法再访问。
package main
import (
"fmt"
)
var s = "Japan"
func main() {
fmt.Println(s) // 打印全局变量s
x := true // 声明并赋值本地变量x
if x {
y := 1 // if块内声明本地变量y并赋值1
if x != false {
fmt.Println(s) // 打印全局变量s
fmt.Println(x) // 打印本地变量x
fmt.Println(y) // 打印本地变量y
}
}
fmt.Println(x) // 打印本地变量x
}
在 main 函数中,我们有三个不同范围的变量:
- s:这是一个全局变量,可以从包中的任何函数(包括main函数)访问。
- x:这是一个在主函数中声明和初始化的局部变量。它只能在主函数中访问。在这种情况下,也可以在主函数内的if块中访问它。
- y:这是一个在第一个if块中声明和初始化的局部变量。它的范围仅限于声明它的块,因此只能在if块及其嵌套块中访问它。在这种情况下,它也可以在第二个if块内访问,该块嵌套在第一个if块中。
Golang 变量的命名约定
以下是命名 Golang 变量的规则:
- 名称必须以字母开头,并且可以包含任意数量的其他字母和数字。
- 变量名称不能以数字开头。
- 变量名称不能包含空格。
- 如果变量的名称以小写字母开头,则只能在当前包中访问它,这被视为unexported的变量,是其他语言中的private变量。
- 如果变量的名称以大写字母开头,则可以从当前包外部的包访问它,这被视为exported的变量,是其他语言中的public变量。
- 如果名称由多个单词组成,则第一个单词之后的每个单词都应大写,如下所示:empName,EmpAddress等。
- 变量名称区分大小写(car、Car 和 CAR 是三个不同的变量)。
零值
如果你声明一个变量而不给它赋值,Golang 会自动将默认值(或零值)绑定到该变量,但零值不代表0,每个类型都有对应的零值。
package main
import "fmt"
func main() {
var quantity float32
fmt.Println(quantity)
var price int16
fmt.Println(price)
var product string
fmt.Println(product)
var inStock bool
fmt.Println(inStock)
}
当上面的代码被编译和执行时,它会产生以下结果:
0
0
false
Golang变量声明块
变量声明可以组合到块中,以提高可读性和代码质量。
package main
import "fmt"
var (
product = "Mobile"
quantity = 50
price = 50.50
inStock = true
)
func main() {
fmt.Println(quantity)
fmt.Println(price)
fmt.Println(product)
fmt.Println(inStock)
}