Go 语言变量详解
在 Go 语言中,变量(Variable)用于存储不同类型的数据。Go 语言是静态类型语言,变量在使用前必须声明,并且一旦确定类型就不能更改。本文将全面讲解 Go 语言变量的定义、作用域、类型推导等内容。
1. 变量的声明方式
Go 语言支持三种声明变量的方式:
- 使用
var关键字声明变量 - 使用
:=进行简短声明 - 使用
const声明常量
(1)使用 var 关键字
var name string = "Alice"
var age int = 25
var isStudent bool = false
特点:
- 变量类型在
var 变量名 类型形式中显式指定。 - 可在函数外部(包级作用域)或函数内部声明。
(2)省略类型(自动推导)
var city = "Beijing"
var temperature = 26.5
特点:
- 编译器自动推导
city为string,temperature为float64。
(3)使用 := 进行简短声明
message := "Hello, Go!"
score := 95
isPassed := true
特点:
- 只能用于函数内部,不能用于全局变量。
:=自动推导变量类型。
(4)声明多个变量
var a, b, c int // 多个变量声明
var x, y = "Go", 100 // 多个变量推导类型
p, q := 1.5, false // 多个变量简短声明
(5)变量分组声明
var (
username string = "John"
age int = 30
salary float64 = 5000.50
)
var (...)方式适用于多个变量的声明,增强可读性。
2. 变量的作用域
变量的作用域决定了它在程序中的可见范围,主要有全局变量和局部变量。
(1)全局变量
- 定义在函数外部
- 整个包都可访问
package main
import "fmt"
// 全局变量
var globalVar = "I am a global variable"
func main() {
fmt.Println(globalVar) // 可访问
}
(2)局部变量
- 定义在函数内部
- 作用域仅限该函数
func main() {
localVar := "I am a local variable"
fmt.Println(localVar) // 正常访问
}
// fmt.Println(localVar) // ❌ 报错:变量超出作用域
3. 变量的默认值
在 Go 语言中,未初始化的变量会赋默认值:
| 数据类型 | 默认值 |
|---|---|
int | 0 |
float64 | 0.0 |
bool | false |
string | ""(空字符串) |
| 指针、slice、map | nil |
示例:
var num int // 默认为 0
var price float64 // 默认为 0.0
var isActive bool // 默认为 false
var text string // 默认为 ""
4. 变量的类型转换
Go 不支持隐式类型转换,需要使用显式转换:
var a int = 10
var b float64 = float64(a) // int 转 float64
var c string = strconv.Itoa(a) // int 转 string
| 源类型 | 目标类型 | 转换方法 |
|---|---|---|
int → float64 | float64(i) | |
float64 → int | int(f) | |
int → string | strconv.Itoa(i) | |
string → int | strconv.Atoi(s) |
5. 常量(const)
常量一旦声明,值不能修改:
const PI = 3.1415926
const GREETING = "Hello, Go!"
const只能用于编译期可确定的值,如数字、字符串、布尔等。- 不能使用
:=声明常量。
枚举(iota)
const (
Sunday = iota // 0
Monday // 1
Tuesday // 2
)
fmt.Println(Sunday, Monday, Tuesday) // 0 1 2
6. 特殊变量 _(空白标识符)
Go 语言提供 _(空白标识符)用于丢弃不需要的变量:
num, _ := strconv.Atoi("100") // 只获取数值,忽略错误
7. 变量生命周期
- 全局变量:程序启动时创建,程序结束时销毁。
- 局部变量:进入作用域时创建,离开作用域时销毁。
示例:
func main() {
num := 100 // 只在 main 函数内存在
fmt.Println(num)
} // num 变量销毁
8. 参考资料
你对 Go 变量还有其他问题吗?😊