1. 使用 var 关键字声明变量

1.1 声明单个变量

使用 var 关键字可以声明一个变量,并且可以选择初始化它。

var a int // 声明一个int类型的变量,默认值为0
var b string // 声明一个string类型的变量,默认值为空字符串
var c bool // 声明一个bool类型的变量,默认值为false

var d int = 10 // 声明并初始化一个int类型的变量
var e string = "Hello" // 声明并初始化一个string类型的变量
var f bool = true // 声明并初始化一个bool类型的变量

1.2 声明多个变量

可以在一行中声明多个变量。

var g, h, i int // 声明三个int类型的变量
var j, k, l = 1, "two", false // 声明并初始化多个变量

1.3 分组声明变量

使用括号分组可以声明多个变量,提升代码的可读性。

var (
    m int
    n string
    o bool
)

2. 使用短变量声明

短变量声明使用 := 操作符,可以在函数内部声明和初始化变量。不能用于包级别变量声明。

p := 20 // 声明并初始化一个int类型的变量
q := "World" // 声明并初始化一个string类型的变量
r := false // 声明并初始化一个bool类型的变量

3. 变量的类型推断

如果在声明时初始化了变量,Go可以根据值的类型推断变量的类型。

s := 30 // 推断s为int类型
t := "Hello, Go" // 推断t为string类型
u := 3.14 // 推断u为float64类型

4. 零值

在Go中,声明但未初始化的变量会赋予其类型的零值。

var v int // 零值为0
var w string // 零值为空字符串""
var x bool // 零值为false
var y *int // 零值为nil

5. 匿名变量

在多重赋值中,使用匿名变量 _ 可以忽略某些值。

func foo() (int, int) {
    return 1, 2
}

a, _ := foo() // 只获取第一个返回值,忽略第二个返回值
_, b := foo() // 只获取第二个返回值,忽略第一个返回值

6. 变量的作用域

变量的作用域决定了变量的可见性和生命周期。变量作用域包括包级别作用域和函数级别作用域。

6.1 包级别作用域

在函数外声明的变量具有包级别作用域,对同一个包内的所有文件可见。

package main

import "fmt"

var globalVar = "I'm global"

func main() {
    fmt.Println(globalVar) // 可以访问globalVar
}

6.2 函数级别作用域

在函数内部声明的变量具有函数级别作用域,仅在函数内部可见。

package main

import "fmt"

func main() {
    localVar := "I'm local"
    fmt.Println(localVar) // 可以访问localVar
}

// fmt.Println(localVar) // 无法访问localVar,编译错误

7. 示例代码

以下是一个包含各种变量声明方式的完整示例代码:

package main

import "fmt"

var packageVar = "Package Level Variable"

func main() {
    var a int // 声明一个int类型的变量,默认值为0
    a = 10

    b := "Function Level Variable" // 使用短变量声明

    var (
        c int
        d string = "Grouped Variable"
    )

    e, f := 20, "Multiple Variables" // 声明并初始化多个变量

    fmt.Println(packageVar)
    fmt.Println(a)
    fmt.Println(b)
    fmt.Println(c)
    fmt.Println(d)
    fmt.Println(e, f)

    // 使用匿名变量
    g, _ := foo()
    _, h := foo()

    fmt.Println(g)
    fmt.Println(h)
}

func foo() (int, string) {
    return 1, "Hello"
}

版权声明:如无特殊说明,文章均为本站原创,转载请注明出处

本文链接:http://example.com/subject/article/90/

许可协议:署名-非商业性使用 4.0 国际许可协议