go语言学习-常量

kuoshuang · · 803 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

下面一句摘自《Go语言编程》:

“go语言中,常量是无类型的。只要这个常量在相应类型的值域范围内,就可以作为该类型的常量,比如常量-12,它可以赋值给int、int32、int64、float32、float64、complex64、complex128等类型的变量。”

注:个人理解,这里的“无类型”,个人理解是不固定类型,并不是真的没有类型。

 

1、常量定义:const

go语言中常量定义和C++中的关键字一样,直接用const关键字定义。

       不同的是,go中用const定义常量时,后面的常量类型不是必须的,个人感觉可以从2个方面理解:

       (1).如本文件开头所述,go语言中常量不固定类型,编译器自己根据等号右边的值确定类型;

       (2).也可以理解为const这个关键字和var类似,用关键字定义变量(常量)同时初始化的时候,可以不需要类型。

 

       常量定义必须是在编译期能确定的值,如:

const tmpConst 1 << 3

由于1 << 3在编译期可以确定值,所以这行命令没问题,下面的命令会编译出错:

const Home = os.GetEnv(“HOME”)

这个命令要在运行GetEnv后得到值才能确定,所以这个命令编译会出错。

 

2、预定义常量

       go语言中预定义常量有:ture, false和iota。

 

ture和false比较容易理解,分别为逻辑真和逻辑假。

iota这个常量比较特殊,iota每次遇到const,就会被置位成0,如果遇到的不是const,则每出现一次iota,iota的值就增加1。如:

const (         //遇到const,iota被赋值成0

c0 = iota   //这时,tota == 0,所以c0 == 0,同时iota++,所以这个赋值完后iota== 1

c1 = iota   //c1 == 1

c2 = iota   //c2 == 2

)

 

       如果两个const的赋值语句的表达式是一样的,那么可以省略后面一个赋值表达式,编译器会默认其和前面的表达式一样。如:

const

(

c0 = iota

c1       //等价于c1 = iota

c2       //等价于c2 = iota

 

)

const

(

       c0= 3

       c1     //等价于c1 = 3

       c2     //等价于c2 = 3

)

 

3、枚举

       go语言中并没有提供enum关键字定义枚举类型,要实现枚举的功能,可以使用上一节中的 const +iota来实现。如:

const

(

    Sunday=iota

    Monday

    Tuesday

    Wednesday

    Thursday

    Friday

    Saturday

    numberOfDays//这个常量没有导出

)

注:go语言中,大写字母开始的符号是“public”的,可以被包外看到,所以上面的numberOfDays只能在本包内可见。

  

 

本文来自:CSDN博客

感谢作者:kuoshuang

查看原文:go语言学习-常量

入群交流(和以上内容无关):Go中文网 QQ 交流群:798786647 或加微信入微信群:274768166 备注:入群;关注公众号:Go语言中文网

803 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传