# 回顾
上一节我们说到了go语言
的变量,和Python不一样,Python似乎没有一个常量的概念(这个常量指的是不可变的数据
)。
今天我们就来稍微介绍下Go语言里面常量的概念。
# 常量
根据上面的描述,我们不难发现,常量是那种类配置文件的数据。
举个例子,我们的http请求有哪些状态码
,其实这些数据都是比较固定的,基本不会变,但你要去在每段代码里面都敲出来,可能比较麻烦。
还有诸如时间格式化字符串
,在Python里面为: %Y-%m-%d %H:%M:%S
,只不过Python没有严格控制
是否能改变这个值。
所以一般这个时候我们就会用到常量
了,
# 关键字const
在go语言里面,我们用const关键字(替代var)来定义一个常量
。
常量关键字 | go语言 | Java |
---|---|---|
const | final |
这里只能先类比下Java了,Java里面我们习惯这么写:
public class Woody {
private static final String NAME = "abcd";
public Woody() {
}
}
2
3
4
5
6
通过final+类型修饰了常量。
在go里面,一般常量只能是字符串
或者数字
,所以不涉及到类型。
我们来看看go里面怎么写:
package main
import "fmt"
const TIMEFORMAT = "2006-01-02 15:04:05"
func main() {
fmt.Println(TIMEFORMAT)
}
2
3
4
5
6
7
8
9
就是这样的定义方式,我们用const 变量名 = 变量值来定义一个常量。
要注意常量的规范是大写字母哦,如果有多个单词用下划线隔开。
# iota
iota,说起这个,大家可能比较陌生。这个无法横向对比,而且比较有意思
。
补充知识: 之前讲了import多行引入的方法,其实定义变量也可以多行定义:
var (
a = 2
b = 3
)
2
3
4
还有个要注意的点就是全局变量
可以定义但不使用,不会报错,局部变量必须使用
。(之前没有强调,搞错了)
接着讲iota,iota只能在常量中定义
,它的意思代表0。
特别适合0-100分别代表100种业务的情况,iota后面的值会默认等于上一个值+1
,所以不需要给cdef再赋值了。
这样图中的变量值就是: a=0 c=1 d=2 e=3 f=4
# 使用场景
当我们需要定义业务错误代码,比如从10000
开始:
10000 => 用户消音,传错了参数或者参数没填
10001 => 用户没有权限
等等等等,那这样的话,iota就可以派上用场了!
这时候就有小可爱要问了,你的iota从0开始,我怎么定义
10000
呢?其实iota是可以运算的,什么意思呢,你试试这样:
这样就可以从10000起步了,可以看到ide提示我们d的值是100002
.
iota其他的细节,大家可以课下提高下,因为用的不算太多,所以这里就不啰嗦了,给孩子加点课后作业吧!
# 作业
如果上图中我定义c = 3,会影响d和e吗
如果我让d = iota,会怎么样
如果我分2个const,在下面再定义一个const,里面也有iota,iota的值会是多少
其实这些大家敲代码都可以知道,所以就不细说了。
# 总结时间
- 定义常量可以用const
- var定义的全局变量可以不使用
- iota默认为0,并且支持+-法运算
- iota定义后的变量可以不赋值,默认为上一个变量的值+1
- iota只能在常量中使用
- 定义变量也可以简写,定义多个
# 画饼时间
下一节学什么呢?还没想好,今天没看菜鸟教程的目录。。。