当前位置: 首页 > java >正文

【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

注意事项
短变量定义法有一些重要的使用限制:

  1. 只能在函数内部使用,不能用于包级别变量定义
  2. 可以重新赋值已存在的变量,但至少要有一个新变量
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 长椿街

http://www.xdnf.cn/news/20254.html

相关文章:

  • 从零构建企业级LLMOps平台:LMForge——支持多模型、可视化编排、知识库与安全审核的全栈解决方案
  • 亲历记:我如何用新系统终结了财务部的开票混乱
  • 全球汽车氮化镓技术市场规模将于2031年增长至180.5亿美元,2025-2031年复合增长率达94.3%,由Infineon和Navitas驱动
  • 中国生成式引擎优化(GEO)市场分析:领先企业格局与未来趋势分析
  • 安全沙箱配置针对海外vps容器隔离的验证方法
  • CAD:绘图功能
  • eda(电子设计自动化)行业的顶级技术机密,布局布线优化的遗传算法实现,以及国内为什么做不成商业EDA
  • RWA点亮新能源的数字未来
  • DJANGO后端服务启动报错及解决
  • 如何在没有权限的服务器上下载NCCL
  • Photoshop图层
  • 【分享】AgileTC测试用例管理平台使用分享
  • 入针点云在皮肤模型上的投影(去除肋骨)
  • HashMap多线程下的循环链表问题
  • 25高教社杯数模国赛【B题高质量成品论文+无盲点解析】第一弹
  • 单元测试:Jest 与 Electron 的结合
  • OpenCV C++ 核心:Mat 与像素操作全解析
  • CAN通信入门
  • 关于rust的所有权以及借用borrowing
  • 汽车 信息娱乐系统 概览
  • 【前端教程】JavaScript 实现图片鼠标悬停切换效果与==和=的区别
  • 寻找AI——初识3D建模AI
  • 中囯移动电视盒子(魔百和)B860AV2.1-A2和CM311-5-zg刷机手记
  • MacOS 通过Homebrew 安装nvm
  • 深度学习中的Zero-shot(零次学习)
  • 【Python基础】 18 Rust 与 Python print 函数完整对比笔记
  • 通过Gen AI SDK调用gemini 2.5 pro,单独上传pdf文件 | ai agent 开发笔记 2025.9.2 Day 2
  • 确保 SQL Server 备份安全有效的最佳实践
  • 【面试场景题】spring应用启动时出现内存溢出怎么排查
  • Nginx 高性能调优指南:从配置到原理