解读golang中的const常量和iota

目录
  • golang中的const常量和iota
  • golang定义常量
    • 定义常量
    • 定义特定类型的常量
  • 总结

golang中的const常量和iota

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

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

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 语句块中的行索引。
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定义常规类型的常量可以忽略类型。

const SUCCESS = true
const FAIL = false

定义多个相同类型的常量

const (
CONST1 = 0
CONST2 = 1
CONST3 = 2
)

定义特定类型的常量

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

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

声明用户状态类型:

type UserStatus int

定义用户状态常量:

const (
USER_STATUS_NORMAL UserStatus = iota
USER_STATUS_DISABLED_LOGIN
USER_STATUS_DELETE
)

完整示例:

package user
//Status 用户类型.
type Status int
const (
//STATUS_NORMAL 状态正常
STATUS_NORMAL Status = iota
//STATUS_DISABLED_LOGIN 禁止登录.
STATUS_DISABLED_LOGIN
//STATUS_DELETE 已删除.
STATUS_DELETE
)

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Go  iota 常量基本语法介绍

    目录 Go 语法 设计思考 为什么叫 iota 为什么需要有 总结 参考资料 Go 语言中有一个非常有特色的东西,那就是 iota 常量.经过某鱼的不完全统计,许多 Go 开发者都是由 PHP.Java.C++.Python 等转型过来,对此还是挺好奇的. Go 语法 在 Go 中枚举常量是使用 iota 枚举器创建的,在功能上,iota 关键字表示从 0 开始的整数常量:在作用上可以简化使用自动递增数字的常量定义,非常方便. 以前定义一个枚举值: const ( a = 0 b = 1 c =

  • 一文搞懂Golang中iota的用法和原理

    目录 前言 iota的使用 iota在const关键字出现时将被重置为0 按行计数 所有注释行和空行全部忽略 跳值占位 多个iota 一行多个iota 首行插队 中间插队 没有表达式的常量定义复用上一行的表达式 实现原理 iota定义 const 前言 我们知道iota是go语言的常量计数器,只能在常量的const表达式中使用,在const关键字出现的时将被重置为0,const中每新增一行常量声明iota值自增1(iota可以理解为const语句块中的行索引),使用iota可以简化常量的定义,但

  • go语言中iota和左移右移的使用说明

    在go语言中iota比较特殊,是一个被编译器修改的常量,在每一个const关键字出现时被重置为0,然后在下一个const出现之前,每出现一次iota,其所代表的数字就会自动加1 左移运算符"<<"是双目运算符 左移n位就是乘以2的n次方. 其功能把"<<"左边的运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0. 右移运算符">>"是双目运算符

  • 解读golang中的const常量和iota

    目录 golang中的const常量和iota golang定义常量 定义常量 定义特定类型的常量 总结 golang中的const常量和iota golang中通过var定义变量,通过const定义常量. 常量只能是基本的简单值类型,常量一经定义其值不可修改(类比Java中的final). const (     MaxInt = int(^uint(0) >> 1)     MinInt = -MaxInt - 1 ) const PI = 3.14 PI = 3.14159//编译错误,

  • 初步解读Golang中的接口相关编写方法

    概述 如果说goroutine和channel是Go并发的两大基石,那么接口是Go语言编程中数据类型的关键.在Go语言的实际编程中,几乎所有的数据结构都围绕接口展开,接口是Go语言中所有数据结构的核心. Go语言中的接口是一些方法的集合(method set),它指定了对象的行为:如果它(任何数据类型)可以做这些事情,那么它就可以在这里使用. 接口的定义和使用 比如 复制代码 代码如下: type I interface{     Get() int     Put(int)   } 这段话就定

  • Golang中channel的原理解读(推荐)

    数据结构 channel的数据结构在$GOROOT/src/runtime/chan.go文件下: type hchan struct { qcount uint // 当前队列中剩余元素个数 dataqsiz uint // 环形队列长度,即可以存放的元素个数 buf unsafe.Pointer // 环形队列指针 elemsize uint16 // 每个元素的大小 closed uint32 // 标记是否关闭 elemtype *_type // 元素类型 sendx uint //

  • Golang中的变量学习小结

    Golang里面变量总的来说分四大类型 1. bool,string bool:指布尔类型,也就是true, false string: 字符串类型 2. (u)int, (u)int8, (u)int16, (u)int32, (u)int64, uintptr int 和 uint, 其中有u和没有u指的是unsigned指的是有无符号,也就是有无正负号,int类型会根据你操作系统的字数来判断是32位还是64位,如果你的操作系统是64位的,那么在定义int的时候就是64位,也就是你定义int

  • Golang中如何实现枚举详析

    Golang中怎么实现枚举?下面本篇文章给大家介绍一下Golang中实现枚举的方法,希望对大家有所帮助! 在编程领域里,枚举用来表示只包含有限数量的固定值的类型,在开发中一般用于标识错误码或者状态机.拿一个实体对象的状态机来说,它通常与这个对象在数据库里对应记录的标识状态的字段值相对应. 在编程领域里,枚举用来表示只包含有限数量的固定值的类型,在开发中一般用于标识错误码或者状态机.拿一个实体对象的状态机来说,它通常与这个对象在数据库里对应记录的标识状态的字段值相对应.[相关推荐:Go视频教程]

  • 深入浅出Golang中select的实现原理

    目录 概述 select实现原理 执行流程 case数据结构 执行select 循环 总结 概述 在go语言中,select语句就是用来监听和channel有关的IO操作,当IO操作发生时,触发相应的case操作,有了select语句,可以实现main主线程与goroutine线程之间的互动.需要的朋友可以参考以下内容,希望对大家有帮助. select实现原理 Golang实现select时,定义了一个数据结构表示每个case语句(包含default,default实际上是一种特殊的case),

  • 一文带你了解Golang中select的实现原理

    目录 概述 结构 现象 非阻塞的收发 随机执行 编译 直接阻塞 独立情况 非阻塞操作 通用情况 运行时 初始化 循环 总结 概述 select是go提供的一种跟并发相关的语法,非常有用.本文将介绍 Go 语言中的 select 的实现原理,包括 select 的结构和常见问题.编译期间的多种优化以及运行时的执行过程. select 是一种与 switch 非常相似的控制结构,与 switch 不同的是,select 中虽然也有多个 case,但是这些 case 中的表达式都必须与 Channel

  • C++中的const和constexpr详解

    C++中的const可用于修饰变量.函数,且在不同的地方有着不同的含义,现总结如下. const的语义 C++中的const的目的是通过编译器来保证对象的常量性,强制编译器将所有可能违背const对象的常量性的操作都视为error. 对象的常量性可以分为两种:物理常量性(即每个bit都不可改变)和逻辑常量性(即对象的表现保持不变).C++中采用的是物理常量性,例如下面的例子: struct A { int *ptr; }; int k = 5, r = 6; const A a = {&k};

  • Golang中的time.Duration类型用法说明

    在 Time 包中,定义有一个名为 Duration 的类型和一些辅助的常量: type Duration int64 const ( Nanosecond Duration = 1 Microsecond = 1000 * Nanosecond Millisecond = 1000 * Microsecond Second = 1000 * Millisecond Minute = 60 * Second Hour = 60 * Minute ) 那么我们看下面一段代码: func Test(

随机推荐