跳到主要内容

Go 变量

变量是方便计算机从内存中取值和向内存中存值的工具。在 Go 语言中,变量有一些独特的特点。

Go 变量特点

静态类型

Go 是静态类型的语言,一旦变量被声明为某个类型,如 intstring,就不能再赋值为其他类型的值。这与 JavaScript 的动态类型不同。在编程中,我需要明确指定变量的类型,避免类型混淆,提高代码的可靠性。

匿名变量

在 Go 中,使用 _ 表示匿名变量。当我需要忽略函数返回值的一部分时,可以使用匿名变量来占位。

package main

import (
"fmt"
)

func main() {
a, _, c := abc()
fmt.Println(a, c)
}

func abc() (int, int, string) {
return 1, 2, "abc"
}

在上述代码中,我调用了 abc() 函数,但只需要第一个和第三个返回值。通过使用匿名变量 _,可以忽略不需要的第二个返回值。

显式类型转换

Go 中的类型转换必须是显式的,Go 不会进行自动的类型转换。这与 JavaScript 的自动类型转换不同。当我需要将一个 int 类型转换为 float64 类型时,需要使用类型转换操作,例如 float64(myInt)

短变量声明

Go 提供了一个简洁的短变量声明符 :=,用于声明并初始化变量。

name := "John"
age := 30

使用 :=,我可以同时声明和赋值,代码更加简洁明了。

零值

在 Go 中,变量在声明时会自动初始化为其类型的零值,避免了未初始化变量的出现。当我声明一个 int 类型的变量而未赋值时,它的默认值是 0string 类型的变量默认值是空字符串。这与 JavaScript 不同,JavaScript 中未赋值的变量是 undefined

指针

Go 语言支持指针,使我可以直接操作变量的内存地址。这与 JavaScript 不同,JavaScript 不支持指针。在 Go 中,我可以使用 & 符号获取变量的地址,使用 * 符号解引用指针,访问指针指向的值。

var a int = 10
var p *int = &a
fmt.Println(*p) // 输出 10

在这段代码中,p 是一个指向整数的指针,指向变量 a。通过 * 操作符,可以获取 p 指向的值。

可见性通过命名控制

Go 通过标识符的命名来控制可见性。首字母大写的变量或函数在外部包中可见(公有的),首字母小写的则仅在包内可见(私有的)。这一规则简单明了,避免了额外的关键字。

不支持自动全局变量

在 Go 中,所有变量都必须显式声明,未声明直接使用会导致编译错误。这与 JavaScript 不同,在 JavaScript 中,如果忘记了 varletconst,变量会自动成为全局变量。Go 的这种设计提高了代码的安全性,避免了意外的全局变量。