目录

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