Skip to content

Go 定义变量有四种写法:var 显式声明、var 带初始化、:= 简短声明、var (...) 批量声明。没显式初始化的一律给零值。

变量的定义 ​

  1. 使用 var 关键字显式声明:

    • 这是最基本的变量声明方式。
    • 需要指定变量的名称和类型。

    例如:

    go
    var age int
    var name string
    var isActive bool
    
    fmt.Println(age, name, isActive)
  2. 使用 var 关键字声明并初始化:

    • 在声明变量的同时进行初始化。
    • 编译器会自动推断变量的类型。

    例如:

    go
    var age int = 30
    var name string = "Alice"
    var isActive bool = true
    
    fmt.Println(age, name, isActive)
  3. 简短变量声明(:=):

    • 在函数内部可以使用 := 进行简短变量声明。
    • 编译器会根据右侧的值自动推断变量的类型。
    • 这种方式不能在函数外部(包级作用域)使用。

    例如:

    go
    age := 30
    name := "Alice"
    isActive := true
    
    fmt.Println(age, name, isActive)
  4. 批量声明:

    • 使用 var 关键字可以批量声明多个变量。
    • 可以在声明的同时进行初始化。

    例如:

    go
    package main
    
    import "fmt"
    
    func main() {
        var (
            age      int    = 30
            name     string = "Alice"
            isActive bool   = true
        )
    
        fmt.Println(age, name, isActive)
    }

变量的初始化 ​

在 Go 中,变量在声明时可以进行初始化。如果没有显式初始化,变量会被赋予其类型的零值。

  1. 零值初始化:

    • 当变量声明后没有显式初始化时,Go 会为其赋予零值。
    • 不同类型的零值:
      • 数值类型(包括整数、浮点数):0
      • 布尔类型:false
      • 字符串类型:空字符串 ""
      • 指针、函数、接口、切片、通道和映射:nil

    例如:

    go
    var age int          // 零值为 0
    var name string      // 零值为 ""
    var isActive bool    // 零值为 false
    var pointer *int     // 零值为 nil
    
    fmt.Println(age, name, isActive, pointer)
  2. 显式初始化:

    • 在声明变量时可以显式地进行初始化。

    例如:

    go
    var age int = 30
    var name string = "Alice"
    var isActive bool = true
    var pointer *int = nil
    
    fmt.Println(age, name, isActive, pointer)
  3. 简短变量声明初始化:

    • 使用简短变量声明可以在声明的同时进行初始化。

    例如:

    go
    age := 30
    name := "Alice"
    isActive := true
    
    fmt.Println(age, name, isActive)

示例代码 ​

以下是一个示例代码,展示了变量的定义和初始化方式:

go
package main

import "fmt"

func main() {
    // 使用 var 关键字显式声明
    var age int
    var name string
    var isActive bool

    // 打印零值
    fmt.Println("Age:", age)           // 0
    fmt.Println("Name:", name)         // ""
    fmt.Println("Is Active:", isActive) // false

    // 使用 var 关键字声明并初始化
    var age2 int = 30
    var name2 string = "Alice"
    var isActive2 bool = true

    // 打印初始化值
    fmt.Println("Age2:", age2)           // 30
    fmt.Println("Name2:", name2)         // Alice
    fmt.Println("Is Active2:", isActive2) // true

    // 简短变量声明
    age3 := 25
    name3 := "Bob"
    isActive3 := false

    // 打印初始化值
    fmt.Println("Age3:", age3)           // 25
    fmt.Println("Name3:", name3)         // Bob
    fmt.Println("Is Active3:", isActive3) // false

    // 批量声明
    var (
        age4      int    = 40
        name4     string = "Charlie"
        isActive4 bool   = true
    )

    // 打印初始化值
    fmt.Println("Age4:", age4)           // 40
    fmt.Println("Name4:", name4)         // Charlie
    fmt.Println("Is Active4:", isActive4) // true
}

总结 ​

四种写法差别在使用位置:var 能用在包级,:= 只能在函数内部,批量声明把一组相关变量放在一起。零值机制保证变量一声明就有确定值,不会出现"未初始化"这种坑。

参考资料 ​

相关页面 ​

Hello Golang