解读golang中的const常量和iota

 更新时间:2022年12月29日 10:49:59   作者:liberg  
这篇文章主要介绍了golang中的const常量和iota,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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
)

总结

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

相关文章

  • Go使用Protocol Buffers在数据序列化的优势示例详解

    Go使用Protocol Buffers在数据序列化的优势示例详解

    这篇文章主要为大家介绍了Go使用Protocol Buffers在数据序列化的优势示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • Go WaitGroup及Cond底层实现原理

    Go WaitGroup及Cond底层实现原理

    这篇文章主要为大家介绍了Go WaitGroup及Cond底层实现原理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • 分析Go错误处理优化go recover机制缺陷

    分析Go错误处理优化go recover机制缺陷

    这篇文章主要为大家介绍了分析Go错误处理优化go recover机制缺陷示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Golang观察者模式优化订单处理系统实例探究

    Golang观察者模式优化订单处理系统实例探究

    当涉及到订单处理系统时,观察者设计模式可以用于实现订单状态的变化和通知,在这篇文章中,我们将介绍如何使用Golang来实现观察者设计模式,并提供一个基于订单处理系统的代码示例
    2024-01-01
  • go语言基础 seek光标位置os包的使用

    go语言基础 seek光标位置os包的使用

    这篇文章主要介绍了go语言基础 seek光标位置os包的使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • 深入探究Go语言中for range语句

    深入探究Go语言中for range语句

    为了更加便捷地遍历这些数据类型,Go语言引入了for...range语句,本文将以数组遍历为起点,逐步介绍for...range语句在不同数据类型中的应用,希望对大家有所帮助
    2023-06-06
  • 如何在Go语言中灵活运用匿名函数和闭包

    如何在Go语言中灵活运用匿名函数和闭包

    这篇文章主要为大家介绍了如何在Go语言中灵活运用匿名函数和闭包实现实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • Golang泛型实现类型转换的方法实例

    Golang泛型实现类型转换的方法实例

    将一个值从一种类型转换到另一种类型,便发生了类型转换,下面这篇文章主要给大家介绍了关于Golang泛型实现类型转换的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • Go语言中的switch用法实例分析

    Go语言中的switch用法实例分析

    这篇文章主要介绍了Go语言中的switch用法,实例分析了switch的功能及使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • GO语言中接口和接口型函数的具体使用

    GO语言中接口和接口型函数的具体使用

    本文主要介绍了GO语言中接口和接口型函数的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03

最新评论