go变量与常量
变量
变量声明
一般形式的变量声明,可以同时声明多个同类型变量,初始化为默认值或者可以手动赋初始值。
// case1
var identifier type
// case2
var identifier1, identifier2 type
// case3
var identifier1, identifier2 int = 1, 2
类型自动推导,可以同时声明多个不同类型的变量。
// case1
var identifier = 1
// case2
var identifier1, identifier2 = 1, "hello"
// case3
var (
identifier1 = 1
identifier2 = "hello"
)
简短类型声明,等号左边必须包含至少一个新的变量名,不然会报错。
// case1
identifier := 1
// case2
identifier1, identifier2 := 1, "hello"
作用域与变量覆盖
当进入子作用域的时候,可以使用同名的变量,这时可以起到覆盖的作用。
func main() {
n := 1
{
n := "hello"
fmt.Println(n) // 输出hello
}
fmt.Println(n) // 输出1
}
这个规则遇到简短类型声明多个变量的时候也是成立的,子作用域中还是新的变量。
func main() {
n, m := 1, 2
{
n, k := 3, 4
fmt.Println(n, k) // 输出3, 4
}
fmt.Println(n, m) // 输出1, 2
}
常量
常量声明
常量的声明和变量是一样的,只是前面的var
换成了const
,并且常量必须在声明的时候赋初值。
// case1
const identifier int = 1
// case2
const identifier1, identifier2 int = 1, 2
// case3
const identifier = 1
// case4
const identifier1, identifier2 = 1, "hello"
// case5
const (
identifier1 = 1
identifier2 = "hello"
)
iota
在上面case5
中,常量可以不指定右侧的表达式,但第一个常量名必须指定,忽略右侧表达式的常量相当于重写了一遍上一个常量右侧的表达式。
const (
thumb = 1
index
middle = 2
ring
pinky
)
fmt.Println(thumb, index, middle, ring, pinky) // 输出1 1 2 2 2
iota
在go中是特殊的关键字,表示常数生成器。iota
从0开始,每隔一行就增加1。
const (
thumb = iota
index
middle
ring
pinky
)
fmt.Println(thumb, index, middle, ring, pinky) // 输出0 1 2 3 4
中途使用iota
,这里就看出iota
其实就是代表当前所在行数。
const (
thumb = 100
index
middle = iota
ring
pinky
)
fmt.Println(thumb, index, middle, ring, pinky) // 输出100 100 2 3 4
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)