大白话学Go语言(5) Go语言的常量介绍.md

2022/6/13 Go语言

# 回顾

上一节我们说到了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() {
  }
}
1
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)
}
1
2
3
4
5
6
7
8
9

就是这样的定义方式,我们用const 变量名 = 变量值来定义一个常量。

要注意常量的规范是大写字母哦,如果有多个单词用下划线隔开。

# iota

iota,说起这个,大家可能比较陌生。这个无法横向对比,而且比较有意思

补充知识: 之前讲了import多行引入的方法,其实定义变量也可以多行定义:

var (  
a = 2  
b = 3  
)
1
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的值会是多少

    其实这些大家敲代码都可以知道,所以就不细说了。

# 总结时间

  1. 定义常量可以用const
  2. var定义的全局变量可以不使用
  3. iota默认为0,并且支持+-法运算
  4. iota定义后的变量可以不赋值,默认为上一个变量的值+1
  5. iota只能在常量中使用
  6. 定义变量也可以简写,定义多个

# 画饼时间

下一节学什么呢?还没想好,今天没看菜鸟教程的目录。。。