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

golang语法-----变量、常量

变量

1、声明与初始化

(1)标准声明 (先声明,后赋值)

var age int       // 声明一个 int 类型的变量 age,此时 age 的值是 0
fmt.Println(age)  // 输出: 0age = 30          // 给 age 赋值
fmt.Println(age)  // 输出: 30//int 的零值是 0
//float 的零值是 0.0
//bool 的零值是 false
//string 的零值是 "" (空字符串)
//指针、切片、map、channel、函数等引用类型的零值是 nil

(2)声明的同时初始化(最常用)

var name string = "张三"
var height float64 = 1.75

(3)类型推断

var name = "李四"      // 编译器自动推断 name 是 string 类型
var isStudent = true   // 编译器自动推断 isStudent 是 bool 类型

(4)短变量声明 := (只可以在函数内部使用)

func main() {// 不能在函数外使用 a := 10// 声明并初始化city := "北京" // 等价于 var city string = "北京"count := 100   // 等价于 var count int = 100// 重复声明会报错// count := 200 // 编译错误: no new variables on left side of :=// 但如果左侧有新变量,就可以对已有变量重新赋值count, err := doSomething() // 这是合法的,因为 err 是新变量
}

(5)分组声明

// 包级别变量分组,这是类型推断
var (AppName    = "MyApp"AppVersion = "1.0.0"Author     string
)func main() {// 函数内局部变量分组,这是标准声明var (user  stringid    inttoken string)user, id, token = "admin", 1, "xyz-abc"
}

注意:

空白标识符 _ 被称为匿名变量,主要用于忽略函数返回的不需要的值

比如:

// io.WriteString 返回写入的字节数和一个错误
// 我只关心错误,不关心写入了多少字节,所以用 _ 忽略第一个返回值
_, err := io.WriteString(file, "hello")

常量

1、声明与初始化

(1)单个声明

和变量类似,同样支持类型推断。

const Pi float64 = 3.14159
const AppTitle = "我的应用" // 自动推断为 string

(2)分组声明

定义多个相关常量的推荐方式。

const (StatusOK      = 200StatusNotFound  = 404
)

2、常量的核心特性

(1)不可变性:一旦声明,不可改变

(2)编译时确定:常量的值必须是在编译期间就能计算出来的表达式。不能是函数调用(运行时)的结果。

const a = 10 + 20       // 合法,编译时可以计算
const b = len("hello")  // 合法,len() 是内置函数,编译时可确定// const randNum = rand.Intn(100) // 编译错误,rand.Intn() 是运行时函数

(3)特殊常量iota

iota 是 Go 语言常量组中的一个非常有用的工具,它是一个可以被编译器修改的常量。

  • iota 只能在 const 声明块中使用。
  • 每个 const 块开始时,iota 的值被重置为 0
  • 在 const 块中,每新增一行常量声明,iota 的值会自动递增 1

iota 非常适合用来定义一组连续的整数,比如枚举、状态码、星期等。

const (Sunday = iota  // 0Monday         // 1 (自动继承上一行的表达式,iota 递增)Tuesday        // 2Wednesday      // 3
)
const (_ = iota // iota = 0, 忽略 0KB = 1 << (10 * iota) // iota = 1,  1 << (10*1) = 1024MB = 1 << (10 * iota) // iota = 2,  1 << (10*2) = 1048576GB = 1 << (10 * iota) // iota = 3TB = 1 << (10 * iota) // iota = 4
)
// `const` 块在这里结束,iota "消失"了。

注意:

无法在 const 代码块的外面打印 iota 的值iota 并不是一个普通的变量,它是一个特殊的标识符,只在 const 声明块内部有效

可以把 iota 想象成一个只在 const 工厂里工作的“临时计数器”

  1. 生命周期:当 Go 编译器遇到 const ( 时,这个计数器就被创建并重置为 0
  2. 工作内容:在 const 代码块内,每定义一个新常量(每换一行),这个计数器就自动加 1
  3. 结束:当 const 代码块结束时(遇到 )),这个“临时计数器”就被销毁了
http://www.lryc.cn/news/588882.html

相关文章:

  • Go语言统计字符串中每个字符出现的次数 — 简易频率分析器
  • 解锁Redis:从安装到配置的全攻略
  • DBeaver 传输数据库A数据到数据库B
  • LLM指纹底层技术——特征提取
  • 06-C语言:第06天笔记
  • python的广东省家庭旅游接待信息管理系统
  • 文心一言4.5开源模型测评:ERNIE-4.5-0.3B超轻量模型部署指南
  • NineData 社区版 V4.3.0 正式发布!新增 5 条迁移对比链路,全面支持 MariaDB、GaussDB 等数据库
  • 使用python的pillow模块将图片转化为灰度图,获取值和修改值
  • Redis Desktop Manager(RDM)下载与安装使用教程
  • STM32小实验二--流水灯
  • 【R语言】警告conversion failure on ‘中文字符‘ in ‘mbcsToSbcs‘: for 注 (U+6CE8)
  • 海狸IM - 一个功能完整的开源即时通讯系统
  • DeepSWE:通过强化学习扩展训练开源编码智能体
  • 2025开放原子开源生态大会 | 开源欧拉的AI原生实践与全球协作
  • 基于开源AI大模型、AI智能名片与S2B2C商城小程序源码的用户价值引导与核心用户沉淀策略研究
  • Android target34升级到35中的edge-to-edge适配
  • 【Android】按钮的使用
  • Softhub软件下载站实战开发(十八):软件分类展示
  • 图像修复:深度学习实现老照片划痕修复+老照片上色
  • 三种深度学习模型(LSTM、CNN-LSTM、贝叶斯优化的CNN-LSTM/BO-CNN-LSTM)对北半球光伏数据进行时间序列预测
  • Datawhale AI 夏令营第一期(机器学习方向)Task2 笔记:用户新增预测挑战赛 —— 从业务理解到技术实现
  • 《C++模板高阶机制解析:非类型参数、特化设计与分离编译实践》
  • react的Fiber架构和双向链表区别
  • Redis 数据持久化
  • Cookie全解析:Web开发核心机制
  • Unity Editor下拉框,支持搜索,多层级
  • Expression 类的静态方法
  • 用TensorFlow进行逻辑回归(五)
  • 简单明了的对比PyTorch与TensorFlow