Go 变量
最后修改于 2025 年 5 月 3 日
在本文中,我们将展示如何在 Golang 中使用变量。
Go 中的变量
Go 中的变量用于存储值并作为数据的标签。var 关键字用于显式声明变量,而 := 简写提供了一种替代方法,允许基于赋值值进行隐式类型推断。
变量可以存储不同数据类型的值。 数据类型 定义了一组可能的值以及允许在这些值上执行的操作。虽然 Go 支持显式类型声明,但它通常会从赋值的右侧自动推断数据类型,从而减少手动指定的需求。
与一旦赋值就保持不变的常量不同,变量的值会随着时间而改变。常量使用 const 关键字声明,以确保它们的值在程序执行期间保持固定。使用常量可以通过防止意外修改来提高代码的可靠性。
Go 声明变量
变量的类型跟在变量名后面。
package main
import "fmt"
func main() {
var i int = 1
var w float64 = 12.5
fmt.Println(i, w)
}
在代码示例中,我们声明并初始化了两个变量。之后,我们打印它们。
$ go run declaring.go 1 12.5
Go 声明多个变量
使用 var 关键字,我们可以一次声明多个变量。
package main
import (
"fmt"
)
func main() {
var i, j, k = 1, 2, 3
var (
name = "John Doe"
occupation = "gardener"
)
fmt.Println(i, j, k)
fmt.Printf("%s is a %s\n", name, occupation)
}
该示例展示了如何使用 var 声明多个变量。
$ go run var_init.go 1 2 3 John Doe is a gardener
Go 类型推断
Go 可以从赋值的右侧推断数据类型。
package main
import (
"fmt"
"reflect"
)
func main() {
var name = "John Doe"
var age = 34
fmt.Println(reflect.TypeOf(name))
fmt.Println(reflect.TypeOf(age))
fmt.Printf("%s is %d years old\n", name, age)
}
在代码示例中,我们定义了两个变量,而没有指定它们的数据类型。数据类型是从右侧推断出来的。
var name = "John Doe" var age = 34
为了让推断正常工作,变量必须被初始化。
fmt.Println(reflect.TypeOf(name)) fmt.Println(reflect.TypeOf(age))
借助 reflect 包中的 TypeOf 函数,我们打印了两个变量的数据类型。
$ go run inference.go string int John Doe is 34 years old
Go 简写变量声明
在函数内部,可以使用 := 简短赋值语句代替带有隐式类型的 var 声明。
package main
import "fmt"
func main() {
name := "John Doe"
age := 34
fmt.Printf("%s is %d years old\n", name, age)
}
该示例使用简写符号声明了两个变量。
Go 简写多个变量声明
我们也可以使用简写符号定义多个变量。
package main
import "fmt"
func main() {
name, age := "John Doe", 34
fmt.Printf("%s is %d years old\n", name, age)
}
该程序在一行中使用简写符号声明了两个变量。
Go 变量默认值
没有显式初始值的变量会被赋予其零值
- 0 - 数值类型
- false - 布尔类型
- "" - 字符串类型
package main
import "fmt"
func main() {
var age int
var isPresent bool
var name string
var weight float64
fmt.Println(age, isPresent, name, weight)
}
代码示例中的四个变量都获得了它们的默认值。
Go 变量作用域
变量的作用域是代码中可以引用该变量的区域。
package main
import "fmt"
var word string = "falcon"
func main() {
i := 12
fmt.Println(word)
fmt.Println(i)
test()
}
func test() {
fmt.Println(word)
}
在代码示例中,我们定义了两个变量。
var word string = "falcon"
word 变量定义在全局作用域。它在 main 和 test 函数中都可见。
func main() {
i := 12
...
i 变量具有局部作用域。它仅在 main 函数内部可见。
Go 常量
与变量不同,常量不能随时间改变其值。它们使用 const 关键字定义。按照惯例,常量用大写字母书写。
package main
import "fmt"
func main() {
var age int = 34
const WIDTH = 100
age = 35
age = 36
// WIDTH = 101
fmt.Println(age, WIDTH)
}
在代码示例中,我们处理了 age 变量和一个 WIDTH 常量。
来源
The Go Programming Language Specification
在本文中,我们介绍了 Golang 中的变量。