Go语言关于const和iota进阶实战

简介: 你能做对这几道面试题吗?Go语言关于const和iota进阶实战

const 用于定义常量,定义之后不能修改,不能再次赋值,在程序运行期间不会改变。


定义一个常量


const pi = 3.1415926


批量声明常量


const (
   statusOk = 200
   notFound = 404
   serverError = 500
)


批量声明常量时,如果某一行没有写=,那么就和上一行一致


const (
   n1 = 100
   n2
   n3
)


打印结果:n1 n2 n3 都是100


iota


  1. 在const关键字出现时将被重置为0;
  2. const中每增加一行常量声明,将使 iota 计数一次
  3. 我iota的理解就是类似枚举


const (
   a1 = iota //0
   a2
   a3
)


打印结果:a1:0 a2:1 a3:2


iota面试题1


const (
   b1 = iota //0
   b2        //1
   _         //2
   b3        //3
)


分析:_也占了一行,所以_的值相当于是2,打印b3的值为3


iota面试题2:插队情况(1)


const (
   c1 = iota //0
   c2 = 100  //100
   c3        //100
   c4        //100
)



分析:c1=iota,所以c1的值为0很好理解;因为c2=100,而c3、c4没有=,所以和c2的值保持一致都是100


iota面试题3:插队情况(2)


const (
   d1 = iota //0
   d2 = 100  //100
   d3 = iota //2
   d4        //3
)


分析:d3的值为2可能出乎有些同学的意料,有的同学可能觉得d3的值为0,其实不是的。这道题其实就是为了让d3继续使用iota的方式设置值。 或者这么讲:在面试题2中怎么设置让c3不为100,而是继续按照iota赋值,让c3=2呢?面试题3就给出了答案。


多个常量声明在一行


const (
   d1, d2 = iota + 1, iota + 2 //1 2
   d3, d4 = iota + 1, iota + 2 //2 3
)


分析:其实很好理解,第一行的iota值为0,第二行的iota值为1,再执行加法运算就是注释中标注的结果了


iota应用实例


定义数量级


const (
   _  = iota
   KB = 1 << (10 * iota)
   MB = 1 << (10 * iota)
   GB = 1 << (10 * iota)
   TB = 1 << (10 * iota)
   PB = 1 << (10 * iota)
)


输出结果


KB: 1024
MB: 1048576
GB: 1073741824
TB: 1099511627776
PB: 1125899906842624


更进一步


猜一下下面代码段的输出结果是什么?


const (
   _  = iota
   KB = 1 << (10 * iota)
   MB
   GB
   TB
   PB
)


打印结果和上面是一样的:


微信图片_20221112124954.jpg


总结


定义常量使用const关键字,定义之后不能修改,不能再次赋值,在程序运行期间不会改变。

iota是go语言中很特殊的设定,我在PHP中还没用过类似的定义方式,关于iota还有哪些应用场景欢迎大家在评论区里指教


公众号:程序员升级打怪之旅

微信号:wangzhongyang1993

相关文章
|
3月前
|
Linux Go iOS开发
Go语言100个实战案例-进阶与部署篇:使用Go打包生成可执行文件
本文详解Go语言打包与跨平台编译技巧,涵盖`go build`命令、多平台构建、二进制优化及资源嵌入(embed),助你将项目编译为无依赖的独立可执行文件,轻松实现高效分发与部署。
|
4月前
|
数据采集 数据挖掘 测试技术
Go与Python爬虫实战对比:从开发效率到性能瓶颈的深度解析
本文对比了Python与Go在爬虫开发中的特点。Python凭借Scrapy等框架在开发效率和易用性上占优,适合快速开发与中小型项目;而Go凭借高并发和高性能优势,适用于大规模、长期运行的爬虫服务。文章通过代码示例和性能测试,分析了两者在并发能力、错误处理、部署维护等方面的差异,并探讨了未来融合发展的趋势。
335 0
|
2月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
172 1
|
3月前
|
存储 前端开发 JavaScript
Go语言实战案例-项目实战篇:编写一个轻量级在线聊天室
本文介绍如何用Go语言从零实现一个轻量级在线聊天室,基于WebSocket实现实时通信,支持多人消息广播。涵盖前后端开发、技术选型与功能扩展,助你掌握Go高并发与实时通信核心技术。
|
4月前
|
负载均衡 监控 Java
微服务稳定性三板斧:熔断、限流与负载均衡全面解析(附 Hystrix-Go 实战代码)
在微服务架构中,高可用与稳定性至关重要。本文详解熔断、限流与负载均衡三大关键技术,结合API网关与Hystrix-Go实战,帮助构建健壮、弹性的微服务系统。
490 1
微服务稳定性三板斧:熔断、限流与负载均衡全面解析(附 Hystrix-Go 实战代码)
|
4月前
|
Cloud Native Go API
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
377 0
|
4月前
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
244 0
|
4月前
|
Cloud Native Java 中间件
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
219 0
|
10月前
|
存储 缓存 安全
Go 语言中的 Sync.Map 详解:并发安全的 Map 实现
`sync.Map` 是 Go 语言中用于并发安全操作的 Map 实现,适用于读多写少的场景。它通过两个底层 Map(`read` 和 `dirty`)实现读写分离,提供高效的读性能。主要方法包括 `Store`、`Load`、`Delete` 等。在大量写入时性能可能下降,需谨慎选择使用场景。
|
存储 负载均衡 监控
如何利用Go语言的高效性、并发支持、简洁性和跨平台性等优势,通过合理设计架构、实现负载均衡、构建容错机制、建立监控体系、优化数据存储及实施服务治理等步骤,打造稳定可靠的服务架构。
在数字化时代,构建高可靠性服务架构至关重要。本文探讨了如何利用Go语言的高效性、并发支持、简洁性和跨平台性等优势,通过合理设计架构、实现负载均衡、构建容错机制、建立监控体系、优化数据存储及实施服务治理等步骤,打造稳定可靠的服务架构。
288 1