跳转到主要内容
模块 1 · 第 1 课(共 5)课程中的1/50~10 min
模块课程(1/5)

变量和类型

在 Go 中,每个变量都有一个编译器已知的静态类型:一次 声明后,变量不能更改类型。这种刚性——非常不同 来自 JavaScript 或 Python — 是获得编译时间所付出的代价 错误而不是运行时错误、小二进制文件且可预测 性能。

两种申报形式

具有显式类型的 var

Go
var name string = "Ada"
var age int = 36
var active bool

当您省略该值(如 var active bool 中)时,变量会接收 其类型的零值——我们将在下一课中讨论这一点。

简短声明 :=

在函数内部,您可以使用 :=,它从 右边的表达式。这是惯用的形式,也是您将使用的形式 90%的时间:

Go
name := "Ada"   // string
age := 36        // int
pi := 3.14       // float64
active := true   // bool

您马上就会遇到的基本类型

类型示例笔记
int42大小取决于 CPU(32 或 64 位)
float643.14十进制文字的默认值
string"Ada"UTF-8,不可变
booltrue、false没有“truthy”,只有纯布尔
rune'A'int32 的别名,表示 Unicode 代码点
byte0x7F0x7F uint8 的别名

还有 int8/16/32/64、uint8/16/32/64、float32 和 complex64/128 当您需要精确的大小时(二进制解析、互操作等)。

多重声明

您可以使用 var 块或复数 := 声明多个变量:

Go
var (
    name   string = "Ada"
    age    int    = 36
    active bool
)

x, y := 10, 20
a, b, c := "a", 2, true   // different types: no problem

已声明但未使用的变量

Go 是严格的:声明但从未使用的变量是编译 错误,而不是警告。这同样适用于未使用的 import。

Go
func main() {
    x := 42
    // error: x declared and not used
}

要暂时静默规则,您可以使用 _ (空白标识符):

Go
_ = x

轮到你了

锻炼#go.m1.l1.e1
尝试:0加载中...

使用 var 声明一个字符串类型的变量名,值为“Ada”并打印它。

正在加载编辑器...
显示提示

长格式为“var <名称> <类型> = <值>”。

3 次尝试后可用的解决方案

锻炼#go.m1.l1.e2
尝试:0加载中...

在一行中,使用 := 将 36 分配给年龄,并将“Roma”分配给城市,然后打印两者。

正在加载编辑器...
显示提示

您可以一次分配多个变量:`a, b := 1, "due"`。

3 次尝试后可用的解决方案

Quiz#go.m1.l1.e3
准备好

如果将这些声明放在函数外部,哪一个会产生编译错误?

Go
// (a)
var name string = "Ada"

// (b)
age := 36

// (c)
const PI = 3.14
答案选项

回顾

  • 静态类型,由 := 自动推断或用 var 声明。
  • := 仅在函数内部;仅在包级别 var/const。
  • 未使用的变量和导入 = 编译错误:使用 _ 来静默它们。
  • int/float64/string/bool 涵盖 90% 的日常情况。