【Go】P2 Golang 常量与变量
目录
- 常量
- 常量的基本规则
- 常量定义的方法
- 单个常量的声明
- 常量组声明
- 批量声明的简化形式
- iota:强大的常量生成器
- 基本用法
- 高级技巧
- 变量
- 变量命名的基本规则
- 变量定义的方法
- 1. 标准变量定义
- 2. 一次定义多个变量
- 3. 短变量定义法
- 4. 匿名变量
- 5. 零值的合理利用
- 小结:对比常量与变量
常量
常量的基本规则
常量,是编译时就已确定的值,一旦定义就无法再修改。常量使用 const
关键字声明:
const pi = 3.14159
const greeting = "Hi, Go!"
const enabled = true
对于包级常量与函数级常量,其作用范围不同、写法亦不同。此外,以大写字母开头的常量可以被其他包导入:
package mainconst ExportedConst = "可导出的常量" // 可导出
const privateConst = "私有常量" // 不可导出const PackageConst = "包级常量"func main() {// 可以在包内任何地方使用fmt.Println(PackageConst)
}func example() {const localConst = "函数级常量"// 只能在函数内使用fmt.Println(localConst)
}
常量定义的方法
常量的定义,支持有类型常量(Typed Constants)与无类型常量(Untyped Constants):
-
有类型常量:
const typedInt int = 66 const typedFloat float64 = 3.14 const typedString string = "ni"
-
无类型常量:
const untypedInt = 66
const untypedFloat = 3.14
const untypedString = "hi"
对于无类型常量,在使用时会根据上下文自动推断类型。
单个常量的声明
const name = "张三"
const age = 45
常量组声明
const (StatusOK = 200StatusNotFound = 404StatusInternalError = 500
)
批量声明的简化形式
在常量组中,如果不指定值,会复用上一个常量的表达式:
const (a = 1b // b = 1c // c = 1d = 2e // e = 2
)
iota:强大的常量生成器
iota 是 Go 语言的内置标识符,用于在常量声明中生成连续的整数值。在一个 const
分组中,iota 从 0 开始,每遇到一个常量声明,它的值就自动加 1。
基本用法
const (Sunday = iota // 0Monday // 1Tuesday // 2...
)
高级技巧
跳过某些值
const (_ = iota // 跳过 0KB = 1 << (10 * iota) // 1 << 10 = 10000000000 (二进制) = 1024 (十进制)。MB // MB = 1 << (10 * 2)...
)
复杂表达式
const (bit0 = 1 << iota // 1 << 0bit1 // 1 << 1 = 2 (十进制)bit2 // 1 << 2 = 4(十进制)
)
同一行使用多次 iota
const (a, b = iota + 1, iota + 2 // a=1, b=2c, d // c=2, d=3e, f // e=3, f=4
)
变量
变量命名的基本规则
Go语言变量命名遵循以下基本规则:
- 只能包含字母、数字和下划线
- 必须以字母或下划线开头,不能以数字开头
- 区分大小写
- 不能使用Go语言的关键字
- 建议使用驼峰命名法
// 正确的变量名
var userName string
var age int
var _temp float64
var isValid bool
var userID int// 错误的变量名
var 123name string // 不能以数字开头
var user-name string // 不能包含连字符
var for string // 不能使用关键字
变量定义的方法
1. 标准变量定义
使用 var
关键字进行变量定义:
// 定义单个变量
var name string
var age int
var height float64// 定义时初始化
var name string = "张三"
var age int = 25
var height float64 = 175.5// 类型推断
var name = "张三" // 自动推断为string类型
var age = 25 // 自动推断为int类型
var height = 175.5 // 自动推断为float64类型
2. 一次定义多个变量
Go语言提供了多种方式来同时定义多个变量:
方法一:同类型批量定义
var name, address, email string
var x, y, z int
方法二:不同类型批量定义
var (name stringage intheight float64isValid bool
)
方法三:批量定义并初始化
var name, age, height = "李四", 30, 180.0var (username = "admin"password = "123456"port = 8080debug = true
)
3. 短变量定义法
短变量定义法使用 :=
操作符,是Go语言特有的简洁语法:
// 单个变量
name := "王五"
age := 28
height := 172.3// 多个变量
name, age, city := "赵六", 35, "北京"
x, y := 10, 20
注意事项
短变量定义法有一些重要的使用限制:
- 只能在函数内部使用,不能用于包级别变量定义
- 可以重新赋值已存在的变量,但至少要有一个新变量
func main() {// 正确:定义新变量name := "测试"// 正确:重新赋值现有变量,同时定义新变量name, age := "新名字", 25// 错误:所有变量都已存在// name, age := "另一个名字", 30 // 编译错误// 正确:普通赋值name, age = "另一个名字", 30
}
4. 匿名变量
通过匿名变量,可以明确表达出只需要的部分返回值。
studentName, _, _ := getStudentInfo() // 只需要姓名
5. 零值的合理利用
Go 语言中不同的变量类型都存在有零值:
var a int // 零值为0
var b string // 零值为""
var c bool // 零值为false
var d []int // 零值为nil
...
小结:对比常量与变量
特性 | 常量 | 变量 |
---|---|---|
可变性 | 不可修改 | 可修改 |
内存分配 | 编译时替换 | 运行时分配 |
初始化时机 | 编译时 | 运行时 |
作用域 | 编译时作用域 | 运行时作用域 |
掌握常量与变量是 Go 语言代码编写的基础。
2025.09 长椿街