Go语言常量的声明_第1页
Go语言常量的声明_第2页
Go语言常量的声明_第3页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第第页Go语言常量的声明

在Go语言中,常量表示的是固定的值,常量表达式的值在编译期进行计算,常量的值不可以修改。例如:3、Let'sgo、3.14等等。常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。

常量的声明

常量的声明使用关键字const:

const=const=多个相同类型的声明可以写成:

const,=,下面是一个声明常量的例子:

packagemainimport"fmt"funcmain(){constaint=10constb="Let'sgo"fmt.Println("a=",a)fmt.Println("b=",b)//a=12//error}运行该程序输出如下:

a=10b=Let'sgo因为常量不能修改,如果把最后一行的解释去掉,编译会出错。

下面的例子,因为函数调用发生在运行时,所以不能将函数的返回值赋值给常量。

packagemainimport("fmt""math")funcmain(){vara=math.Abs(-1.2)//constb=math.Abs(-3.1)//errorfmt.Println(a)}当然,和变量声明一样,常量也可以一组一起声明,这比较适合声明一组相关的常量:

const(e=2.71828182845904523536028747135266249775724709369995957496696763(pi)=3.14159265358979323846264338327950288419716939937510582097494459)如果是一次声明一组常量,除了第一个外,其它常量右边的初始化表达式都可以省略,如果省略初始化表达式则表示使用前面常量的初始化表达式写法,对应的常量类型也一样的。例如:

packagemainimport("fmt")const(num1=1num2num3=2num4)funcmain(){fmt.Println("num1=",num1)fmt.Println("num2=",num2)fmt.Println("num3=",num3)fmt.Println("num4=",num4)}上面的程序输出为:

num1=1num2=1num3=2num4=2同样的,一组常量一起声明可以用作枚举:

const(Monday=1Tu(esd)ay=2Wedne(sd)ay=3Thu(rs)day=4Friday=5Saturday=6Sunday=7)当然,后面还有更好的枚举写法。

常量间的所有算术运算、逻辑运算和比较运算的结果也是常量,对常量的类型转换操作或以下函数调用都是返回常量结果:len()、cap()、real()、imag()、complex()和unsafe.Sizeof()。注意在常量表达式中,函数必须是内置函数,否则编译不通过。

packagemainimport("fmt""unsafe")funcmain(){const(a="Let'sgo"length=len(a)size=unsafe.Sizeof(a))fmt.Println("a=",a)fmt.Println("length=",length)fmt.Println("size=",size)}上面程序的输出结果如下:

a=Let'sgolength=8size=16当然,你可能对最后一行的输出有些疑惑,为什么size大小是16,这里解释一下,size指的是类型的大小,此处为字符串类型大小,字符串类型在Go中是一个结构,包含指向底层数组的指针和长度,这两部分每部分都是8个字节,所以字符串类型大小为16个字节,所以输出为16。

无类型常量

Go中的常量有个不同寻常之处。虽然一个常量可以有任意一个确定的基础类型,但是许多常量并没有一个明确的基础类型。这里有六种未明确类型的常量类型,分别是无类型的布尔型、无类型的整数、无类型的字符、无类型的浮点数、无类型的复数、无类型的字符串。

(iot)a常量生成器

iota特殊常量,可以认为是一个可以被编译器修改的常量。常量声明可以使用iota常量生成器初始化,它用于生成一组以相似规则初始化的常量,但是不用每行都写一遍初始化表达式。在一个const声明语句中,在第一个声明的常量所在的行,iota将会被置为0,然后在每一个有常量声明的行加一。iota可以被用作枚举值:

packagemainimport("fmt")const(Sundayint=iotaMondayTuesday)funcmain(){fmt.Println("Sunday=",Sunday)fmt.Println("Monday=",Monday)fmt.Println("Tuesday=",Tuesday)}上面的程序输出为:

Sunday=0Monday=1Tuesday=2如果出现另一个const声明语句,iota将会重新置为0:

packagemainimport("fmt")const(a=iota//iota=0b//iota=1c//iota=2d="go"//go,iota=3e//和上一行一样为go,iota=4f=100//100,iota=5g//和上一行一样为100,iota=6h=iota//iota=7i//iota=8)const(j=iota//iota重新计数,iota=0k//iota=1)funcmain(){fmt.Println("a=",a)fmt.Println("b=",b)fmt.Println("c=",c)fmt.Println("d=",d)fmt.Println("e=",e)fmt.Println("f=",f)fmt.Println("g=",g)fmt.Println("h=",h)fmt.Println("i=",i)fmt.Println("j=",j)fmt.Println("k=",k)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论