📌  相关文章
📜  golang 中的变量 - Go 编程语言 - Go 编程语言(1)

📅  最后修改于: 2023-12-03 15:01:02.014000             🧑  作者: Mango

Golang 中的变量

Golang 是一门静态类型的语言,变量在使用前必须被声明,并且变量类型和值类型需要匹配,下面让我们来详细讨论一下 Golang 中的变量。

变量声明

在 Golang 中,可以使用 var 关键字来声明变量。变量声明的语法如下:

var 变量名 变量类型

例如,声明一个整型变量 i,代码如下所示:

var i int

变量声明语句可以批量声明多个变量,如下所示:

var a, b, c int

在变量声明时,可以使用短变量声明语法 := 来同时完成变量的声明和赋值,如下所示:

x := 10

这行代码声明了变量 x 并赋值为 10。需要注意的是,使用短变量声明语法时,只能够用在函数内部,而不能在函数外部使用。

变量赋值

在 Golang 中,可以使用赋值语句 = 来给变量赋值,代码如下所示:

i = 10

赋值语句可以与变量声明一起使用,如下所示:

var i int = 10

在多个变量赋值时,也可以使用括号来对变量进行分组,如下所示:

var (
    j int = 1
    k int = 2
)

需要注意的是,在 Golang 中,变量必须在使用之前被赋值,否则编译器会报错。另外,一条赋值语句可以赋多个变量,如下所示:

i, j, k = 1, 2, 3
变量类型

Golang 是一门静态类型的语言,变量在声明时必须指定类型,例如:

var i int = 10

如果不指定变量类型,编译器就会根据变量的初始值来推导出变量类型,如下所示:

var i = 10 // 推导出 i 的类型为 int

在 Golang 中,也可以使用 := 简化变量声明和赋值,这样编译器会根据变量的初始值自动推导出变量类型,代码如下所示:

i := 10 // 推导出 i 的类型为 int

需要注意的是,当一个变量被声明但没有被赋初值时,Golang 会赋予此变量一个默认零值,例如:

  • 布尔类型的零值是 false
  • 整型和浮点型零值是 0
  • 字符串零值是空字符串 ""
  • 指针类型的零值是 nil
变量作用域

在 Golang 中,变量的作用域决定了变量的可见范围,下面介绍 Golang 中的三种变量作用域:

全局变量

在函数定义外部声明的变量即为全局变量,全局变量对整个程序都可见,如下所示:

var str = "hello, world" // 全局变量

func main() {
    fmt.Println(str) // 可以访问全局变量 str
}
局部变量

在函数内部声明的变量即为局部变量,局部变量只在函数内部可见,如下所示:

func main() {
    var i int       // 局部变量
    fmt.Println(i) // 局部变量 i 未初始化,输出为 0
}
块级作用域变量

在块级作用域中声明的变量,只在该块级作用域中有效,例如:

func main() {
    i := 1
    if i > 0 {
        j := 1 // 块级作用域变量 j
        fmt.Println(j)
    }

    // 在这里访问变量 j,编译器会报错
    // fmt.Println(j)
}

需要注意的是,在 Golang 中,并不存在 JavaScript 中常见的块级作用域和函数作用域的概念,只有全局作用域和局部作用域的区分。