美文网首页
04 | 常量与iota

04 | 常量与iota

作者: 刀斧手何在 | 来源:发表于2020-03-21 18:15 被阅读0次

常量

  • 使用const定义,类型可不指定
const Con string = "hello"
const Constr = "world"
func TestCon(t *testing.T){
    //t.Log(getConNum())
    t.Log(Con)
    t.Log(Constr)
    t.Log(reflect.TypeOf(Con))
}
  • 常量可以是字符、字符串、布尔值或数值(整数型、浮点型和复数)
  • 常量的值必须在编译时就能够确定
func getConNum() int {
    return 1
}

const Con  = getConNum()
func TestCon(t *testing.T){
    //t.Log(getConNum())
    t.Log(Con)
}
//result : const initializer getConNum() is not a constant

当然下面的代码是可以正常运行的,因为string实际上不是函数,而是关键字

const Con  = string(65)
func TestCon(t *testing.T){
    //t.Log(getConNum())
    t.Log(Con)
}
//result : A
  • 无类型数值常量可以在赋值时进行自动类型转化
const Conint = 1
func TestCon(t *testing.T){
    var i8 int8 = Conint
    var i64 int64 = Conint
    t.Log(Conint)
    t.Log(reflect.TypeOf(Conint))
    t.Log(i8)
    t.Log(reflect.TypeOf(i8))
    t.Log(i64)
    t.Log(reflect.TypeOf(i64))
}
//result: 1,int,1,int8,1,int64
//Conint = 1.1 => constant 1.1 truncated to integer 
//Conint = 65536 => constant 65536 overflows int8

  • 批量声明常量。
const (
    a = 1
    b
    c = 1.1
    d
)
func TestCon(t *testing.T){
    t.Log(a,b,c,d)
    t.Log(reflect.TypeOf(a))
    t.Log(reflect.TypeOf(b))
    t.Log(reflect.TypeOf(c))
    t.Log(reflect.TypeOf(d))
}
//result 1,1,1.1,1.1

除了第一个外,其它的常量右边的初始化表达式都可以省略,如果省略初始化表达式则表示使用前面常量的初始化表达式,对应的常量类型也是一样的

  • 常量允许定义后不使用

iota

在常量声明中,预声明的标识符 iota表示连续的无类型整数。它的值为常量定义所在行的索引,从0开始计数。所以 也叫做常量计数器。

const (
    c0 = iota // c0 == 0 iota = 0
    c1 = -1 // c1 == -1 iota = 1(未使用)
    c2,c3 = iota ,iota+2// c2 == 2 c3 == 2+2 iota = 2
    c5 = iota // c5 == 4
)
const c6  = iota //iota = 0
func TestCon(t *testing.T){
    t.Log(c0,c1,c2,c3,c5,c6)
}
  • iota只能在const 定义时使用
func TestCon(t *testing.T){
    t.Log(iota)
}
//result : undefined: iota
  • 实现常量自增
const (
    Sunday = iota
    Monday
    Tuesday
    Wednesday
    Thursday
    Friday
    Partyday
)
func TestCon(t *testing.T){
    t.Log(Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Partyday)
}
  • 实现常量移位
const (
    Readable = 1 << iota
    Writeable
    Executable
)
func TestCon(t *testing.T){
    t.Log(Readable,Writeable,Executable)
}

相关文章

  • Go语言--iota枚举

    介绍 iota 常量自动生成器,每个一行,自动累加1 iota给常量赋值使用3.iota遇到const,重置为04...

  • 04 | 常量与iota

    常量 使用const定义,类型可不指定 常量可以是字符、字符串、布尔值或数值(整数型、浮点型和复数) 常量的值必须...

  • go IOTA常量计数器1期

    iota是golang语言的常量计数器,只能在常量的表达式中使用。 iota在const关键字出现时将被重置为0(...

  • A Note of Effective Go (Second H

    Initialization Constants用iota创建枚举常量 Variables The init fu...

  • golang学习笔记--iota

    go中的iota 1.iota只能在常量的表达式中使用、2.每次const出现时都会让iota初始化为03.用作枚...

  • Go语言的变量与常量

    1.变量声明,初始化与赋值 2.变量可见性规则; 3.常量,常量的声明和iota的使用 变量声明:var 变量名 ...

  • Golang 常量使用iota

    基本概念 iota是Go语言的常量计数器,只能在常量的表达式中使用。iota默认值为0,在且仅在const关键字出...

  • 《Go语言四十二章经》第四章 常量

    《Go语言四十二章经》第四章 常量 作者:李骁 4.1 常量以及iota 常量使用关键字 const 定义,用于存...

  • 第01天(基本类型、流程控制)_02

    07_常量的使用.go 08_多个变量或常量定义.go 09_iota枚举.go 10_bool类型.go 11_...

  • Go基础 - 2 变量,常量

    变量 已声明但未使用的变量会在编译阶段报错 常量 常量计数器 iota是常量的计数器, 从0开始, 组中每定义1个...

网友评论

      本文标题:04 | 常量与iota

      本文链接:https://www.haomeiwen.com/subject/bsirthtx.html