写点什么

这几道 const 和 iota 的面试题你能做对吗?

作者:王中阳Go
  • 2022-10-17
    北京
  • 本文字数:1064 字

    阅读完需:约 1 分钟

这几道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: 1024MB: 1048576GB: 1073741824TB: 1099511627776PB: 1125899906842624
复制代码

总结

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


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

一起学习,升级打怪

我们搞了一个对学 Go 真正有帮助的群,欢迎加入:

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

微信号:wangzhongyang1993

发布于: 刚刚阅读数: 5
用户头像

王中阳Go

关注

公众号:程序员升级打怪之旅 2022-10-09 加入

微信:wangzhongyang1993

评论 (1 条评论)

发布
用户头像
const 用于定义常量,定义之后不能修改,不能再次赋值,在程序运行期间不会改变。而iota你知道怎么用吗?....
刚刚 · 北京
回复
没有更多了
这几道const和iota的面试题你能做对吗?_Go_王中阳Go_InfoQ写作社区