脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Golang - 解读golang中的const常量和iota

解读golang中的const常量和iota

2022-12-30 15:43liberg Golang

这篇文章主要介绍了golang中的const常量和iota,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

golang中的const常量和iota

golang中通过var定义变量,通过const定义常量。

常量只能是基本的简单值类型,常量一经定义其值不可修改(类比Java中的final)。

?
1
2
3
4
5
6
const (
    MaxInt = int(^uint(0) >> 1)
    MinInt = -MaxInt - 1
)
const PI = 3.14
PI = 3.14159//编译错误,Cannot assign to PI
  • iota是一个特殊常量,可以认为是一个可以被编译器修改的常量。
  • iota在const关键字出现时将被重置为0,const中每新增一行常量声明将使 iota 计数加1,因此iota可作为const 语句块中的行索引。
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
const (
    a   = 1                  //1 (iota=0)
    b                        //1 (iota=1,同上一行,相当于写b=1)
    c   = b + iota           //3 (iota=2,b=1)
    d                        //4 (iota=3,同上一行,相当于写b+iota,b=1)
    e                        //5 (iota=4,同上一行,相当于写b+iota,b=1)
    f   = "last one but one" //  (iota=5)
    end = iota               //6 (iota=6)
)
fmt.Println(a, reflect.TypeOf(a))
fmt.Println(b, reflect.TypeOf(b))
fmt.Println(c, reflect.TypeOf(c))
fmt.Println(d, reflect.TypeOf(d))
fmt.Println(e, reflect.TypeOf(e))
fmt.Println(f, reflect.TypeOf(f))
fmt.Println(end, reflect.TypeOf(end))
/* 
输出:
1 int
1 int
3 int
4 int
5 int
last one but one string
6 int
*/

golang定义常量

在所有的编程语言当中常量都代表一个固定的值,一旦常量被定义则无法修改。在Golang中使用const关键字进行常量声明。

定义常量

Golang定义常规类型的常量可以忽略类型。

?
1
2
const SUCCESS = true
const FAIL = false

定义多个相同类型的常量

?
1
2
3
4
5
const (
CONST1 = 0
CONST2 = 1
CONST3 = 2
)

定义特定类型的常量

定义特定类型的常量需要根据实际情况来决定。

假如我们现在用常量来声明用户的三个基本状态(正常,禁止登录,删除),一般这种情况我们会首先声明一个用户状态的类型。

声明用户状态类型:

?
1
type UserStatus int

定义用户状态常量:

?
1
2
3
4
5
const (
USER_STATUS_NORMAL UserStatus = iota
USER_STATUS_DISABLED_LOGIN
USER_STATUS_DELETE
)

完整示例:

?
1
2
3
4
5
6
7
8
9
10
11
package user
//Status 用户类型.
type Status int
const (
//STATUS_NORMAL 状态正常
STATUS_NORMAL Status = iota
//STATUS_DISABLED_LOGIN 禁止登录.
STATUS_DISABLED_LOGIN
//STATUS_DELETE 已删除.
STATUS_DELETE
)

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/linysuccess/article/details/102639706

延伸 · 阅读

精彩推荐
  • Golanggolang顺时针打印矩阵的方法示例

    golang顺时针打印矩阵的方法示例

    这篇文章主要介绍了golang顺时针打印矩阵的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...

    ifcoder4982020-05-22
  • Golanggolang服务报错: write: broken pipe的解决方案

    golang服务报错: write: broken pipe的解决方案

    在开发在线客服系统的时候,看到日志里有一些错误信息,下面这篇文章主要给大家介绍了关于golang服务报错: write: broken pipe的解决方案,需要的朋友可以参考...

    杰哥的技术杂货铺6602022-09-08
  • Golanggolang http请求封装代码

    golang http请求封装代码

    这篇文章主要介绍了golang http请求封装代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    一名路过的小码农7292021-02-28
  • Golanggolang 中strings包的Replace的使用说明

    golang 中strings包的Replace的使用说明

    这篇文章主要介绍了golang 中strings包的Replace的使用说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    kph_Hajash11482021-04-20
  • GolangGo中变量命名规则与实例

    Go中变量命名规则与实例

    命名规则涉及变量、常量、全局函数、结构、接口、方法等的命名,下面这篇文章主要给大家介绍了关于Go中变量命名的相关资料,文中通过实例代码介绍的非...

    Spongecaptain10812022-08-30
  • GolangGO语言包管理工具go mod以及包详解

    GO语言包管理工具go mod以及包详解

    go mod是go的一个模块管理工具,用来代替传统的GOPATH方案,下面这篇文章主要给大家介绍了关于GO语言包管理工具go mod以及包详解的相关资料,文中通过实例代码...

    Studying!!!10502022-07-20
  • GolangGolang中的路由使用详解

    Golang中的路由使用详解

    这篇文章主要介绍了Golang中的路由使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...

    达闻西7512020-05-16
  • GolangGolang学习笔记(二):类型、变量、常量

    Golang学习笔记(二):类型、变量、常量

    这篇文章主要介绍了Golang学习笔记(二):类型、变量、常量,本文讲解了基本类型、保留字、变量、常量、枚举、运算符、指针、分组声明等内容,需要的...

    Golang教程网2272020-04-26