当前位置: 首页 > 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.xdnf.cn/news/1129069.html

相关文章:

  • Ubuntu 22.04 安装 mysql-server与 postgreSQL 服务端
  • AI助手指南:从零开始打造Python学习环境(VSCode + Lingma/Copilot + Anaconda + 效率工具包)
  • 倒计时熔断机制的出价逻辑
  • 711SJBH构建制造业信息化人才培训体系的对策-开题报告
  • 【LeetCode Solutions】LeetCode 181 ~ 185 题解
  • 深度学习图像增强方法(一)
  • 编程项目选择思考点以及项目包装的关键点
  • 3-Nodejs-使用fs文件系统模块
  • uniapp打包成 apk
  • 在百亿流量面前,让“不存在”无处遁形——Redis 缓存穿透的极限攻防实录
  • 原点安全签约金网络数科,共建一体化数据安全防护体系
  • 设计模式二:策略模式 (Strategy Pattern)
  • AiPy+豆包:数据分析可视化,一键生成GUI工具
  • Vue.js 动画与过渡:让你的界面“活”起来,提升用户体验的视觉魔法!
  • : $ operator is invalid for atomic vectors
  • 【SpringBoot】实战-开发模式及环境搭建
  • 前端面试专栏-工程化:25.项目亮点与技术难点梳理
  • Python 操作Excel工作表:添加、删除、移动、隐藏
  • omniparser v2 本地部署及制作docker镜像(20250715)
  • Linux 环境下安装 Node.js v16.13.0 完整指南
  • Unity沉浸式/360View/全景渲染
  • LeetCode--46.全排列
  • 深度学习 Pytorch图像分类步骤
  • Linux部署Python服务
  • sglang笔记1: 后端详细阅读版
  • 文心一言4.5开源模型测评:ERNIE-4.5-0.3B超轻量模型部署指南
  • Halcon双相机单标定板标定实现拼图
  • Java线程池深度解析与Spring Boot实战指南
  • resources为什么是类的根目录
  • 策略设计模式分析