🧩 一、什么是变量?
变量是程序在运行期间用于保存数据的容器。Go 语言是一种强类型语言,每个变量在使用前都必须明确声明其类型或让编译器自动推导类型。
📌 变量的特点:
-
可读可写(相较于常量)
-
类型固定(静态类型语言)
-
作用域清晰(函数内外变量不可混用)
✳️ 二、变量声明方式详解
Go 中一共有 三种变量声明方式,每种适用于不同场景:
✅ 1️⃣ 使用 var
关键字(最通用)
var name string // 声明未赋值,默认为 "" var age int = 18 // 显式指定类型 + 初始化 var score = 90.5 // 自动推导为 float64
💬 适用场景:
-
全局变量
-
函数外变量
-
明确声明类型便于阅读
✅ 2️⃣ 简短声明 :=
(只能函数内用)
nickname := "小明" height := 1.75
💬 适用场景:
-
函数体内部快速声明变量
-
不需要写类型,编译器自动推导
🧨 注意:
-
只能在函数内部使用
-
必须是新变量(至少一个变量是新声明)
✅ 3️⃣ 批量声明
var ( id int = 1001 userName = "zhangsan" isLogin bool )
💬 适用场景:
-
一次性声明多个变量,代码整洁
-
通常用于结构初始化、全局变量区域
🛠️ 三、Go 变量类型与零值
📦 常见变量类型:
类型名 | 示例值 | 零值 |
---|---|---|
int | 42 | 0 |
float64 | 3.14 | 0.0 |
string | "hello" | "" |
bool | true | false |
*int | nil | nil |
[]int | [] | nil |
💬 零值定义:
零值是变量在未显式赋值时的默认值,保证变量总能安全访问,不会出现“未初始化”错误。
📛 四、变量命名规则与可见性
-
✅ 必须以字母或下划线开头
-
✅ 区分大小写
-
❌ 不可使用 Go 关键字(如
func
,var
,package
)
🧱 可见性规则:
-
变量以小写字母开头:仅包内可见(私有)
-
变量以大写字母开头:对包外可见(公有)
var Name = "对外可见" var name = "只在本包内可见"
🎭 五、匿名变量 _
—— 忽略不需要的值
Go 的函数可以返回多个值,如果你不需要其中某个值,可以用 _
占位:
func getData() (int, string) { return 1, "data" } a, _ := getData() // 忽略第二个值
📌 _
是一个只写不读的特殊变量,不会占用内存空间。
🔄 六、变量的作用域
变量只能在其作用域内有效:
示例:
func example() { x := 10 // x 只在 example 内有效 if x > 5 { y := 20 // y 只在 if 代码块内有效 } }
📌 小技巧:
-
变量的生命周期 = 作用域的持续时间
-
Go 编译器会报错:声明未使用的变量
🧪 七、常见陷阱与注意点
⚠️ 问题 | 🧠 原因 | ✅ 建议 |
---|---|---|
declared but not used | 声明了变量但没用 | 声明后务必使用 |
no new variables on left side of := | 使用了重复变量名 | 确保至少有一个变量是新变量 |
:= 在函数外不能用 | 只能函数内部使用 | 全局变量请使用 var |
🔄 八、Go 变量类型推导规则
编译器如何推导类型?
i := 10 // int f := 3.14 // float64 b := true // bool s := "golang" // string
📌 注意:默认浮点数是 float64
,整数是 int
。
📝 九、小练习(可做成卡片图)
你能判断这些变量的类型吗?
x := 100 y := "hello" z := true t := 3.0 + 5
答案:int
、string
、bool
、float64