Go 学习笔记——常量
背景——凡事都要有个背景
年前,给自己定了几个 flag,其中包含初步掌握一门新的后端语言。当时定的方向是 Java 或者 Go,考虑到 C#和 Java 有很多相通的地方,而且最新的 dotnet core 框架和 java 的 spring boot 很像,想着深入学习一下 Java。但转念一想,Java 虽然对我来说,可能上手难度会更低一些,但其庞大且成熟的生态圈子,对后期的学习肯定会造成一定的阻力,而且,投入进去后,我可能很难同时兼顾 C#和 java 两个方向,而且我当下的工作用的是微软的技术栈,以 dotnet 为主,所以还是想考虑以下其他的方向。
而当前 go 的市场异常火热,属于高速发展期,生态圈子初成,包括 go 语言自身也在不断地更新迭代,在高速发展期切入进去,后续 go 的生态圈子肯定会慢慢完善,而我自己在使用和学习 go 的过程中也会逐步了解 go 的生态圈。所以从各方面来将,当下还是适合抄底 go 语言方向~
正题之前
我的学习笔记,只是单纯的笔记,因为我看书或者文章时看着看着会走神,用这种方式来强迫自己入定学习,也会有一点点个人的总结,所以,大神请指教。然后学习路径是极客时间上 Tony Bai 老师的《Go语言第一课》,因为本身没有 go 基础,不知道课好不好,我是看着挺容易理解的,这里也实名推荐一下这门课~
笔记内容
一、常量的好处
编译初期被创建,整个生命周期内值不变,好处是并发场景,不用考虑常量的同步,这一点和其他语言的常量定义基本是一样的
原生支持,类型安全
go 语言提供了多种关于常量的创新点,便于不同场景的应用,这里我个人最喜欢用常量来实现枚举的特性。
二、go 语言中常量的创新
无类型常量,顾名思义,即看起来没有定义数值类型的常量(这里还要提一点,go 语言的常量定义只支持字符串,数值和布尔类型),但实际会根据初始值自动赋予数值类型。
隐式转换
隐式转型说的就是,对于无类型常量参与的表达式求值,Go 编译器会根据上下文中的类型信息,把无类型常量自动转换为相应的类型后,再参与求值计算,这一转型动作是隐式进行的。
--摘自《Go语言第一课》第 14 讲中关于常量创新点的介绍
实现枚举
go 语言原生并没有枚举类型(enum)
Go 的 const 语法提供了“隐式重复前一个非空表达式”的机制
Go 在上述特性的基础上又提供了“神器”:iota,
iota 是 Go 语言的一个预定义标识符,它表示的是 const 声明块(包括单行声明)中,每个常量所处位置在块中的偏移值(从零开始)。同时,每一行中的 iota 自身也是一个无类型常量,可以像前面我们提到的无类型常量那样,自动参与到不同类型的求值过程中来,不需要我们再对它进行显式转型操作。
--摘自《Go语言第一课》第 14 讲中关于常量创新点的介绍
这个例子,把三种场景整到一个例子里来了,偷个懒,懂得都懂。
版权声明: 本文为 InfoQ 作者【为自己带盐】的原创文章。
原文链接:【http://xie.infoq.cn/article/e9d78fc2fe5cba1a625797e1d】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论