284-Go语言的常量 2023-01-15 02:19 39阅读 0赞 ## Go语言的常量 ## 在Go语言中,**常量**是指编译期间就已知且不可改变的值。**常量**可以是数值类型(包括整型、浮点型和复数类型)、布尔类型、字符串类型等。 ## 字面常量 ## 所谓字面常量(literal),**是指程序中硬编码的常量**,如: -12 3.14159265358979323846 // 浮点类型的常量 3.2+12i // 复数类型的常量 true // 布尔类型的常量 "foo" // 字符串常量 在其他语言中,常量通常有特定的类型,比如-12在C语言中会认为是一个int类型的常量。如果要指定一个值为-12的long类型常量,需要写成-12l,这有点违反人们的直观感觉。 **Go语言的字面常量更接近我们自然语言中的常量概念,它是无类型的**。只要这个常量在相应类型的值域范围内,就可以作为该类型的常量,比如上面的常量-12,它可以赋值给int、uint、int32、int64、float32、float64、complex64、complex128等类型的变量。 ## 常量定义 ## 通过const关键字,你可以给字面常量指定一个友好的名字: const Pi float64 = 3.14159265358979323846 const zero = 0.0 // 无类型浮点常量 const ( size int64 = 1024 eof = -1 // 无类型整型常量 ) const u, v float32 = 0, 3 // u = 0.0, v = 3.0,常量的多重赋值 const a, b, c = 3, 4, "foo" // a = 3, b = 4, c = "foo", 无类型整型和字符串常量 **Go的常量定义可以限定常量类型,但不是必需的。如果定义常量时没有指定类型,那么它与字面常量一样,是无类型常量。** **常量定义的右值也可以是一个在编译期运算的常量表达式,比如** const mask = 1 << 3 **由于常量的赋值是一个编译期行为,所以右值不能出现任何需要运行期才能得出结果的表达式**,比如试图以如下方式定义常量就会导致编译错误: const Home = os.GetEnv("HOME") 原因很简单,os.GetEnv()只有在运行期才能知道返回结果,在编译期并不能确定,所以无法作为常量定义的右值。 **相对于变量,常量是恒定不变的值,多用于定义程序运行期间不会改变的那些值。常量的声明使用 const。常量在定义的时候必须赋值** ![在这里插入图片描述][20210421104543516.png_pic_center] **可以一次性声明多个常量,如下** ![在这里插入图片描述][2021042110461327.png_pic_center]**const 同时声明多个常量时,如果省略了值则表示和上面一行的 值相同。 例如** ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xJTlpFWVU2NjY_size_16_color_FFFFFF_t_70_pic_center] ## 预定义常量 ## Go语言预定义了这些常量:**true、false和iota。** **iota**比较特殊,可以被认为是一个可被编译器修改的常量,**在每一个const关键字出现时被重置为0,然后在下一个const出现之前,每出现一次iota,且同一行不管出现多少个iota,同一行的iota的值都是相同的,其所代表的数字会自动增1。** ## 从以下的例子可以基本理解iota的用法: ## **iota 是 go 语言的常量计数器,只能在常量的表达式中使用。当它 遇到 const 时,值会自动置为 0。** const ( // iota被重设为0 c0 = iota // c0 == 0 c1 = iota // c1 == 1 c2 = iota // c2 == 2 ) const ( a = 1 << iota // a == 1 (iota在每个const开头被重设为0) b = 1 << iota // b == 2 c = 1 << iota // c == 4 ) const ( u = iota * 42 // u == 0 v float64 = iota * 42 // v == 42.0 w = iota * 42 // w == 84 ) const x = iota // x == 0 (因为iota又被重设为0了) const y = iota // y == 0 (同上) **如果两个const的赋值语句的表达式是一样的,那么可以省略后一个赋值表达式。因此,上面的前两个const语句可简写为:** const ( // iota被重设为0 c0 = iota // c0 == 0 c1 // c1 == 1 c2 // c2 == 2 ) const ( a = 1 <<iota // a == 1 (iota在每个const开头被重设为0) b // b == 2 c // c == 4 ) ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xJTlpFWVU2NjY_size_16_color_FFFFFF_t_70_pic_center 1] **思考如下,n1,n2,n3 的值** **例子1:** ![在这里插入图片描述][20210421104810877.png_pic_center] ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xJTlpFWVU2NjY_size_16_color_FFFFFF_t_70_pic_center 2] **例子2:** ![在这里插入图片描述][20210421105554732.png_pic_center] ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xJTlpFWVU2NjY_size_16_color_FFFFFF_t_70_pic_center 3] **例子3:** ![在这里插入图片描述][20210421105628931.png_pic_center] ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xJTlpFWVU2NjY_size_16_color_FFFFFF_t_70_pic_center 4] [20210421104543516.png_pic_center]: /images/20221022/81ea81278db8443ab2f52a9f8987fa84.png [2021042110461327.png_pic_center]: /images/20221022/1288488c925341858b22c425c018b828.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xJTlpFWVU2NjY_size_16_color_FFFFFF_t_70_pic_center]: /images/20221022/6cad04e408944de28b5d17c4af50f40b.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xJTlpFWVU2NjY_size_16_color_FFFFFF_t_70_pic_center 1]: /images/20221022/bcf92145518e4f0f8ac658cf048f8893.png [20210421104810877.png_pic_center]: /images/20221022/e9c76ecd41b0456b9d015502edd9847a.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xJTlpFWVU2NjY_size_16_color_FFFFFF_t_70_pic_center 2]: /images/20221022/2abdc63cc51c46f78a359f7008fef0bb.png [20210421105554732.png_pic_center]: /images/20221022/bf0c2e2e46e3445d881d26bc275155aa.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xJTlpFWVU2NjY_size_16_color_FFFFFF_t_70_pic_center 3]: /images/20221022/3fc374dd6c7a4836ae68860a9755cc04.png [20210421105628931.png_pic_center]: /images/20221022/8bfb57085d904f5eb5ba7a3479490781.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xJTlpFWVU2NjY_size_16_color_FFFFFF_t_70_pic_center 4]: /images/20221022/cbea6cfbec3e415e88de223e09d28668.png
相关 Go语言常量 Go语言常量 常量是一个简单的标识符,在程序运行时,不会被修改的量。 常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。 常量的定义格式: > 「爱情、让人受尽委屈。」/ 2021年11月10日 07:40/ 0 赞/ 203 阅读
相关 Go语言笔记--常量与运算符 1.常量的定义 1)常量的值再编译时就已经确定 2)常量的定义格式与变量基本相同 3)等号右侧必须是常量或者常量表达式 4)常量表达式中的函数必须是内置函数 例如 桃扇骨/ 2022年03月15日 05:42/ 0 赞/ 85 阅读
相关 go语言 常量使用 // 变量:程序运行期间,可以改变的量 变量声明需要关键字 var // 常量:程序运行期间,不可以改变的量 常量的声明需要关键字 const co 分手后的思念是犯贱/ 2022年05月21日 05:34/ 0 赞/ 77 阅读
相关 go语言 常量和变量 一.不同类型的变量声明(定义) 1.传统防水 var a int var b float64 2.可以自动推导类型 深藏阁楼爱情的钟/ 2022年05月21日 05:34/ 0 赞/ 111 阅读
相关 Go语言学习之常量(The way to go) 生命不止,继续go go go . 上一篇博客《[Go语言学习之变量(The way to go)][Go_The way to go]介绍了go中的变量,今天就介绍常量。 柔光的暖阳◎/ 2022年07月12日 11:53/ 0 赞/ 53 阅读
相关 Go语言学习之常量(The way to go) 生命不止,继续go go go . 上一篇博客《[Go语言学习之变量(The way to go)][Go_The way to go]介绍了go中的变量,今天就介绍常量。 Love The Way You Lie/ 2022年07月12日 11:53/ 0 赞/ 56 阅读
相关 【Go语言基础】变量和常量 用Go语言编写的程序都是从基本组件构成,而构成这些基本组件的是标识符,本章中将介绍到Go语言中使用到变量,常量以及基本数据类型。 1. 标识符 标识符是函数、变量、常量 叁歲伎倆/ 2022年10月08日 08:20/ 0 赞/ 75 阅读
相关 Go 语言之常量定义与使用 常量和Java中的意思类似,就是被定义后,在程序运行时,不会被修改的量。 Java中定义常量使用final 关键字,Scala中定义常量使用 val ,那么在Go语言中定义常 川长思鸟来/ 2022年12月07日 15:21/ 0 赞/ 32 阅读
相关 go - 常量 常量的类型 布尔型 数字型(整数、浮点数、复数) 字符型 声明常量 1. 自动类型检查 `const <常量名1> = <value_1>` 逃离我推掉我的手/ 2023年01月07日 01:24/ 0 赞/ 47 阅读
相关 284-Go语言的常量 Go语言的常量 在Go语言中,常量是指编译期间就已知且不可改变的值。常量可以是数值类型(包括整型、浮点型和复数类型)、布尔类型、字符串类型等。 字面常量 所谓字面 我会带着你远行/ 2023年01月15日 02:19/ 0 赞/ 40 阅读
还没有评论,来说两句吧...