ZetCode

Golang var 关键字

最后修改于 2025 年 5 月 7 日

本教程将讲解如何在 Go 中使用 var 关键字。我们将通过不同用法的实际示例来介绍变量声明基础知识。

var 关键字用于在 Go 中声明变量,可以选择性地为其初始化值。它用于显式声明带类型的变量。

在 Go 中,var 可以声明单个变量、多个变量和包级变量。它提供了清晰的类型规范和初始化控制。

基本变量声明

var 最简单的用法是声明一个带有类型的单个变量。此示例展示了基本的变量声明。

basic_var.go
package main

import "fmt"

func main() {
    var age int
    age = 30
    
    fmt.Println("Age:", age)
}

变量 age 被声明为 int 类型,之后为其赋值。初始时分配整数的零值(0)。

带初始化的变量

var 可以在一条语句中声明并初始化变量。此示例展示了带即时初始化的声明。

initialized_var.go
package main

import "fmt"

func main() {
    var name string = "Alice"
    var height float64 = 1.75
    
    fmt.Println("Name:", name)
    fmt.Println("Height:", height)
}

两个变量都已声明了它们的类型和初始值。当初始化器提供足够的类型信息时,可以省略类型。

使用 var 进行类型推断

Go 可以从初始化器推断变量类型。此示例使用 var 关键字演示了类型推断。

inferred_var.go
package main

import "fmt"

func main() {
    var active = true
    var count = 42
    var price = 19.99
    
    fmt.Printf("active: %T, %v\n", active, active)
    fmt.Printf("count: %T, %v\n", count, count)
    fmt.Printf("price: %T, %v\n", price, price)
}

变量根据赋给它们的值获得类型:boolintfloat64%T 动词显示了推断出的类型。

多个变量声明

var 可以在一条语句中声明多个变量。此示例展示了声明多个变量的不同方法。

multiple_var.go
package main

import "fmt"

func main() {
    var x, y int = 10, 20
    var a, b = "hello", true
    var (
        name = "Bob"
        age  = 25
    )
    
    fmt.Println(x, y)
    fmt.Println(a, b)
    fmt.Println(name, age)
}

变量可以声明为相同类型、不同类型或在块中。括号创建了一个声明块,以提高可读性。

包级变量

var 可以在包作用域声明变量。这些变量在整个包中可访问。此示例展示了包级变量。

package_var.go
package main

import "fmt"

var globalCount = 0

func increment() {
    globalCount++
}

func main() {
    fmt.Println("Initial count:", globalCount)
    increment()
    increment()
    fmt.Println("Final count:", globalCount)
}

globalCount 在包内的所有函数中都可访问。包变量存在于程序的整个生命周期。

使用 var 的零值

使用 var 声明的变量在未初始化时会接收零值。此示例演示了默认的零值。

zero_var.go
package main

import "fmt"

func main() {
    var i int
    var f float64
    var b bool
    var s string
    
    fmt.Printf("int: %v\n", i)
    fmt.Printf("float64: %v\n", f)
    fmt.Printf("bool: %v\n", b)
    fmt.Printf("string: %q\n", s)
}

零值对于数字是 0,对于布尔值是 false,对于字符串是 ""。%q 动词将空字符串显示为 ""。

var 与短声明

此示例将 var 与短声明语法进行对比,以突出它们的区别。

var_vs_short.go
package main

import "fmt"

var packageVar = "I'm a package variable"

func main() {
    // Using var
    var functionVar = "I'm a function variable"
    
    // Short declaration
    shortVar := "I'm a short declaration"
    
    fmt.Println(packageVar)
    fmt.Println(functionVar)
    fmt.Println(shortVar)
    
    // Re-declaration with short syntax
    shortVar, anotherVar := "changed", "new"
    
    fmt.Println(shortVar, anotherVar)
}

var 可在包级别和函数级别工作,而短声明仅限于函数。短语法允许在声明新变量时重新声明。

来源

Go 语言规范

本教程通过变量在各种场景下声明的实际示例,介绍了 Go 中的 var 关键字。

作者

我叫 Jan Bodnar,是一位充满热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在教授编程方面拥有十多年的经验。

列出所有 Golang 教程