Go语言中的Iota关键字

一、复习常量

提到Iota这个关键字,就必须要复习一下Go语言的常量。

1.Go语言的常量一般使用const声明

2.Go语言的常量只能是布尔型、数字型(整数型、浮点型和复数)和字符串型

3.Go语言的常量可以不指定类型,由编译器自己推断,如下面的【string】就是可以不写的(也称为 隐式类型定义)

const s string = "constant"

4.常量不能在程序运行时改变

二、Iota的用法

通过一个具体的事例,来看iota的特性。例下面的代码输出的结果每一个常量的值是什么?

package IotaDemo

import (
    "fmt"
)

const(
    a = iota
    b
    c
)

const(
    m=1<<iota
    n=2<<iota
    x=10
    y = iota
    z=iota>>1
    o
)

func IotaTest() {

    fmt.Println("a=",a)
    fmt.Println("b=",b)
    fmt.Println("c=",c)

    fmt.Println("m=",m)
    fmt.Println("n=",n)
    fmt.Println("x=",x)
    fmt.Println("y=",y)
    fmt.Println("z=",z)
    fmt.Println("o=",o)
}

结果如下:

a= 0
b= 1
c= 2
m= 1
n= 4
x= 10
y= 3
z= 2
o= 2

上面的结果说明了iota的特性,如下:

  • iota只能被使用在const限定中,相当于一个常量的计数器
  • iota相当于一个枚举值,默认从0开始,在一个const中,会进行+1,例如a、b、c 可以看出来
  • iota不会因为const中被赋值了固定值,就不再增加,const中每有一个常量就+1,例如 x和y ,y并没有因为x被赋值为10,就是2,而是3
  • 每次进入一个新的const,iota都会重新开始计算

补充移位操作知识点:

对于Go语言的<<(右移)和 >>(左移)操作,关键点如下:

  • 1.将移位的值先转换成2进制,右移动就是高位补0,左移就是低位补0
  • 2.操作符右边的是需要移动的位数,左边是待移动的值,

例如 1<<3 就是把1向左移动3位,即00000001 左移3位 变为 00000100 就是4

3<<1 就是把3向左移动1为,即00000011 左移1为 变为 00000110 就是6

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

(0)

相关推荐

  • Go  iota 常量基本语法介绍

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

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

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

  • Golang常量iota的使用实例

    Codes package main import "fmt" type color byte const ( black color = iota red blue ) func test(c color) { fmt.Println(c) } func main() { const ( x = iota // 0 y // 1 z // 2 ) fmt.Printf("x=%v, y=%v, z=%v\n", x, y, z) const ( _ = iota

  • Go语言中的Iota关键字

    一.复习常量 提到Iota这个关键字,就必须要复习一下Go语言的常量. 1.Go语言的常量一般使用const声明 2.Go语言的常量只能是布尔型.数字型(整数型.浮点型和复数)和字符串型 3.Go语言的常量可以不指定类型,由编译器自己推断,如下面的[string]就是可以不写的(也称为 隐式类型定义) const s string = "constant" 4.常量不能在程序运行时改变 二.Iota的用法 通过一个具体的事例,来看iota的特性.例下面的代码输出的结果每一个常量的值是什

  • 浅析Go语言中的Range关键字

    前言 相信用过Range的朋友们都知道,Go语言中的range关键字使用起来非常的方便,它允许你遍历某个slice或者map,并通过两个参数(index和value),分别获取到slice或者map中某个元素所在的index以及其值. 比如像这样的用法: for index, value := range mySlice { fmt.Println("index: " + index) fmt.Println("value: " + value) } 上面的例子足够

  • 深入聊聊C语言中的Const关键字

    目录 前言 01const简述 02常量的应用 常量作为函数的参数 C++中应用加const 03#define和const 总结 前言 const是一个C语言的关键字,它限定一个变量不允许被改变.使用const在一定程序上可以提高程序的健壮性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解别人的程序有所帮助. 01const简述 下面简单描述一下const,基本都是教科书的知识.const修饰的变量,其值存放在只读数据段中,其值不能被改变.称为只读变量.关于什么是数据段,什么

  • 详解C语言中的Static关键字

    一.static关键字的基本含义 首先,static关键字的意思是静态的,用于修饰局部变量,全局变量和函数,修改其数据储存类型 1.局部变量:在任意一个函数内部定义的变量(不加static),初始值不确定,出函数自动销毁,存放于栈区. 使用static修饰这个变量时,编译器会把她初始化为零,存储于静态区,函数返回时值保持不变,出函数不销毁,下一次进入函数依然存在.根本原因——static修饰的局部变量存储在静态区. 2.全局变量 :普通全局变量定义在函数体外部,在静态区分配存储空间,编译器自动对

  • go语言中的defer关键字

    我是谁 defer - 顾名思义翻译过来叫 延迟, 所以我们通常称呼 defer func() 这样 defer 后面紧跟的函数为 延迟函数. 作者注: 不过从实际应用来讲, 延迟函数通常用来做一些函数最终返回前的一些收尾工作, 所以称呼为收尾函数其实更贴切. 三围几何 defer 有其独特的一面, 了解其个性, 才能更好的下手. 延迟性 顾名思义, 既然叫延迟函数, 那么肯定具备延迟性. 我们来看看怎么个延迟法, defer_defer.go // defer_defer.go package

  • 详解C++中的const关键字及与C语言中const的区别

    const对象默认为文件的局部变量,与其他变量不同,除非特别说明,在全局作用域的const变量时定义该对象的文件局部变量.此变量只存在于那个文件中中,不能别其他文件访问.要是const变量能在其他文件中访问,必须显示的指定extern(c中也是)   当你只在定义该const常量的文件中使用该常量时,c++不给你的const常量分配空间--这也是c++的一种优化措施,没有必要浪费内存空间来存储一个常量,此时const int c = 0:相当于#define c 0:    当在当前文件之外使用

  • 浅析C语言中typeof关键字用法

    前言 C语言中 typeof 关键字是用来定义变量数据类型的.在linux内核源代码中广泛使用. 下面是Linux内核源代码中一个关于typeof实例: #define min(x, y) ({ \ typeof(x) _min1 = (x); \ typeof(y) _min2 = (y); \ (void) (&_min1 == &_min2); \ _min1 < _min2 ? _min1 : _min2; }) 1.当x的类型为是 int 时 _min1变量的数据类型则为

  • C语言中volatile关键字的作用与使用案例教程

    一.前言 1.编译器优化介绍: 由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问.另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高执行速度.以上是硬件级别的优化.再看软件一级的优化:一种是在编写代码时由程序员优化,另一种是由编译器进行优化.编译器优化常用的方法有:将内存变量缓存到寄存器:调整指令顺序充分利用CPU指令流水线,常见的是重新排序读写指令.对常规内存进行优

  • C语言中volatile关键字的深入讲解

    1. 什么是volatile关键字? volatile用于声明一个变量,告诉编译器该变量值容易发生改变,在编译.读取.存储该变量的时候都不要做任何优化,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取存储数据,不做优化,在我们做嵌入式开发的时候,该关键字作用很大,因为有时变量地址有可能是系统的一个外设地址,他的值的变化并不在程序控制范围内,随时有可能变化,因此需要对他进行声明,每次读取或者存储直接对地址进行操作,而不经过其他中间商,下面我以一个例子来分析vilatile

随机推荐