变量基础概念
- 定义:在 Go 中,变量是一个包含值的存储器。
- 声明语法:使用
var关键字,后跟变量名和类型(var 名称 类型)。 - 批量声明:可以同时声明多个同类型变量,如
var length, width float64。
变量赋值规则
- 基础赋值:声明后,使用
=赋值(如quantity = 2)。 - 多变量赋值:同一语句中为多个变量赋值,左侧变量名与右侧值用逗号分隔,如
length, width = 1.2, 2.4。 - 声明并赋值:若事先知道值,可在同一行完成(如
var quantity int = 4)。 - 类型推断:声明时若直接赋值,可省略类型,Go 会根据值自动推断(如
var quantity = 4推断为int,var customerName = "Damon Cole"推断为string)。多变量同理:var length, width = 1.2, 2.4均推断为float64。
静态类型与类型安全
- 类型约束:为现有变量分配新值时,必须是同一类型。Go 的静态类型确保不会意外分配错误类型。
- 错误示例:
quantity声明为int,若赋字符串"Damon Cole";或customerName为string,若赋值数字4,编译器会报错(如cannot use "Damon Cole" (type string) as type int in assignment)。 - 使用场景:赋值后可在任何上下文中使用,如打印或参与运算(
length * width)。
代码演示与解析
package main
import (
"fmt"
"reflect"
)
func main() {
// 声明变量(未赋值)
var quantity int
var length, width float64
var customerName string
// 赋值(包括多变量赋值)
quantity = 4
length, width = 1.2, 2.4
customerName = "Damon Cole"
// 声明并赋值(类型推断)
var q = 4 // 推断为 int
var l, w = 1.2, 2.4 // 推断为 float64
var c = "Damon Cole" // 推断为 string
// 使用变量
fmt.Println(customerName, "has ordered", quantity, "sheets")
fmt.Println("each with an area of", length*width, "square meters")
// 验证类型
fmt.Println(reflect.TypeOf(q)) // 输出: int
fmt.Println(reflect.TypeOf(l)) // 输出: float64
fmt.Println(reflect.TypeOf(w)) // 输出: float64
fmt.Println(reflect.TypeOf(c)) // 输出: string
}Code language: JavaScript (javascript)
运行输出示例:
Damon Cole has ordered 4 sheets
each with an area of 2.88 square meters
int
float64
float64
stringCode language: JavaScript (javascript)
总结
| 特性 | 变量(var) | 常量/字面量 | 符文(rune) | 字符串(string) |
|---|---|---|---|---|
| 声明 | var name type | 直接写(如 4) | 单引号 'A' | 双引号 "abc" |
| 类型 | 显式或推断(静态) | 默认(int, float64等) | int32 (Unicode) | string |
| 赋值 | = 可修改(同类型) | 不可变 | 不可变 | 不可变 |
| 用途 | 存储可变状态 | 固定值 | 单字符码点 | 文本序列 |
结合前节静态类型知识,变量声明后类型固定,赋值时严格检查,这保障了代码安全性。类型推断(var x = 值)让代码更简洁,同时保留类型安全。
Previous: 数字和数学运算和比较
Next: GO语言的零值