`
stephen830
  • 浏览: 3010962 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

4.3 常量

 
阅读更多

4.3 常量

常量使用关键字 const 定义,用于存储不会改变的数据。

存储在常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。

常量的定义格式:const identifier [type] = value,例如 const Pi = 3.14159

在 Go 语言中,你可以省略类型说明符 [type],因为编译器可以根据变量的值来推断其类型。

  • 显式类型定义: const b string = "abc"
  • 隐式类型定义: const b = "abc"

一个没有指定类型的常量被使用时,会根据其使用环境而推断出它所需要具备的类型。换句话说,未定义类型的常量会在必要时刻根据上下文来获得相关类型。

var n int
f(n + 5) // 无类型的数字型常量 “5” 它的类型在这里变成了 int

常量的值必须是能够在编译时就能够确定的;你可以在其赋值表达式中涉及计算过程,但是所有用于计算的值必须在编译期间就能获得。

  • 正确的做法:const c1 = 2/3
  • 错误的做法:const c2 = getNumber() // 引发构建错误: getNumber() used as value

译者注:因为在编译期间自定义函数均属于未知,因此无法用于常量的赋值,但内置函数可以使用,如:len()

数字型的常量是没有大小和符号的,并且可以使用任何精度而不会导致溢出:

const Ln2= 0.693147180559945309417232121458\
            176568075500134360255254120680009
const Log2E= 1/Ln2 // this is a precise reciprocal
const Billion = 1e9 // float constant
const hardEight = (1 << 100) >> 97

根据上面的例子我们可以看到,反斜杠 \ 可以在常量表达式中作为多行的连接符使用。

与各种类型的数字型变量相比,你无需担心常量之间的类型转换问题,因为它们都是非常理想的数字。

不过需要注意的是,当常量赋值给一个精度过小的数字型变量时,可能会因为无法正确表达常量所代表的数值而导致溢出,这会在编译期间就引发错误。另外,常量也允许使用并行赋值的形式:

const beef, two, c = “meat”, 2, “veg”
const Monday, Tuesday, Wednesday, Thursday, Friday, Saturday = 1, 2, 3, 4, 5, 6
const (
    Monday, Tuesday, Wednesday = 1, 2, 3
    Thursday, Friday, Saturday = 4, 5, 6
)

常量还可以用作枚举:

const (
    Unknown = 0
    Female = 1
    Male = 2
)

现在,数字 0、1 和 2 分别代表未知性别、女性和男性。这些枚举值可以用于测试某个变量或常量的实际值,比如使用 switch/case 结构 (第 5.3 节).

在这个例子中,iota 可以被用作枚举值:

const (
    a = iota
    b = iota
    c = iota
)

第一个 iota 等于 0,每当 iota 在新的一行被使用时,它的值都会自动加 1;所以 a=0, b=1, c=2 可以简写为如下形式:

const (
    a = iota
    b
    c
)

译者注:关于 iota 的使用涉及到非常复杂多样的情况,这里作者解释的并不清晰,因为很难对 iota 的用法进行直观的文字描述。如希望进一步了解,请观看视频教程 《Go编程基础》 第四课:常量与运算符

iota 也可以用在表达式中,如:iota + 50。在每遇到一个新的常量块或单个常量声明时, iota 都会重置为 0( 译者注:简单地讲,每遇到一次 const 关键字,iota 就重置为 0 )。

当然,常量之所以为常量就是恒定不变的量,因此我们无法在程序运行过程中修改它的值;如果你在代码中试图修改常量的值则会引发编译错误。

引用 time 包中的一段代码作为示例:一周中每天的名称。

const (
    Sunday = iota
    Monday
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
)

你也可以使用某个类型作为枚举常量的类型:

type Color int
const (
    RED Color = iota // 0
    ORANGE // 1
    YELLOW // 2
    GREEN // ..
    BLUE
    INDIGO
    VIOLET // 6
)

注意事项 作为约定,常量的标识符主要使用大写字母,标识符中各个部分的连接字符可用小写字母以便区分,如:const INCHTOwCM = 2.54;这样不仅增强了可读性,而且不会与第 4.2 节中描述的可见性规则冲突。

链接

分享到:
评论

相关推荐

    Ruby编程语言

     4.3常量引用88  4.4方法调用89  4.5赋值92  4.6操作符100  第5章语句和控制结构117  5.1条件式118  5.2循环127  5.3迭代器和可枚举对象130  5.4代码块140  5.5改变控制流146  5.6异常和异常处理154  ...

    Go - Golang - An Introduction to Programming in Go

    **4.3 常量** 常量是指一旦被赋值就不能更改的值。本节讲解了如何定义常量、如何使用多个变量同时赋值给一组常量,以及常量在程序中的用途。 **4.4 定义多个变量** 在实际编程中,经常需要同时定义多个变量。这...

    java程序的代码规范

    **4.3 常量(*)** - 常量应使用`static final`修饰,并采用全大写字母和下划线命名。 **4.4 ?前的逻辑运算表达式** - 在条件表达式中使用逻辑运算符时,应考虑其优先级。 **4.5 变量赋值** - 明确指定变量赋值,...

    Actionscript Virtual Machine(AVM2)

    ##### 4.3 常量池 常量池是一系列常量的集合,包括字符串、符号、类、方法等。它为AVM2提供了访问这些常量的方法。 ##### 4.4 字符串 字符串是AVM2中的基本数据类型之一,用于存储文本数据。在abc文件中,字符串...

    jAVA编程规范J2EE代码规范

    3. **4.3 常量(*)** - 常量名应全大写,单词间使用下划线分隔。 4. **4.4 逻辑运算表达式** - 逻辑运算符两边应有空格,如`if (a && b)`。 5. **4.5 变量赋值** - 避免复杂的链式赋值,如`a = b = c = 1`。 6....

    golang book

    **4.3 常量** 常量与变量类似,但其值在定义后不能被修改。Go语言支持多种类型的常量,包括整型、浮点型、复数、字符串和布尔值。这里讲解了常量的定义方法及其应用场景。 **4.4 定义多个变量** Go语言允许在同一行...

    Go语言最佳入门手册

    **4.3 常量** 常量是在程序运行过程中不会改变的值。 **4.4 变量** 变量是存储数据的容器。 **4.4.1 简介** Go语言中的变量可以存储不同类型的数据。 **4.4.2 值类型和引用类型** Go语言区分值类型和引用类型...

    2023-03-31 项目笔记-第一阶段-4.变量、常量 4.3 变量的分类

    【变量与常量在C语言中的概念】 在C语言中,变量是用于存储数据的容器,它们的值可以在程序执行过程中改变。定义变量时,我们需要指定它的数据类型,这决定了变量能够存储的数据范围和占用的内存空间。C语言中的...

    lcd.rar_4.3 LCD

    LCD驱动通常需要特定的库文件,如“lcd.h”,这是一个C语言头文件,包含了控制LCD显示所需的函数定义、数据结构和常量。这个头文件是开发者在编程时导入的,以利用预定义的功能来与LCD进行通信。这些功能可能包括...

    VBA的命名规则及代码规范 V4.3.doc

    “VBA命名规则及代码规范V4.3” 在本文中,我们将详细介绍VBA命名规则和代码规范的重要性,涵盖变量、常量、自定义类型和枚举类型的命名规则,以及过程和函数、模块、类模块和用户窗体的命名规则。 变量、常量、...

    ffmpegOS4.3.rar

    - 头文件(header files)对于理解和调用FFmpeg的API至关重要,它们定义了函数原型、结构体和常量,方便开发者在自己的项目中集成FFmpeg。 3. **FFmpeg API 使用**: - `avformat` 模块处理输入/输出流,包括打开...

    电子-4.3寸NT35510驱动代码.rar

    标题中的“电子-4.3寸NT35510驱动代码.rar”表明这是一个与电子设备相关的项目,具体是为4.3英寸显示屏编写的一种驱动程序。NT35510是一款常用的液晶显示控制器,常用于小尺寸的触摸屏设备。这种控制器能够处理图像...

    电子-RGB4.3.rar

    可能包括定义颜色常量、函数来设置RGB值、驱动GPIO端口进行颜色输出,或者与某种显示设备或传感器交互的接口。对于初学者,理解并分析这个源代码有助于提升在嵌入式系统编程和硬件控制方面的技能。 在正点原子的...

    muxin-4#muxin-note#第 4 节 常量 & 变量 & 数据类型 1

    第 4 节 常量&变量4.1 常量概述常量:是指在Java程序中固定不变的数据。4.2 常量分类4.3 变量概述变量:常量是固定不变的数据,那么在程序中可以变化

    VS2019-Viasfora4.3

    1. **代码着色和高亮**:Viasfora扩展了Visual Studio的默认颜色主题,提供更多的语法高亮选项,帮助开发者区分不同类型的代码元素,如类型、方法、常量等,使得代码更易于阅读和理解。 2. **增强的缩进指导线**:...

    PyPI 官网下载 | astropy-4.3-cp38-cp38-win32.whl

    《PyPI官网下载 | astropy-4.3-cp38-cp38-win32.whl:Python科学计算库的深度解析》 在Python的世界里,有一个强大的库专门用于天文和物理学的数据处理,那就是Astropy。这个标题提到的"PyPI官网下载 | astropy-4.3...

    PureBasic 4.3 Linux 版

    - 支持常量,二进制和十六进制的数值 - 常量和数字数据可写在一个表达中 - 标准算术支持遵守符号优先和括号: +, -, /, *, and, or, , &gt;&gt; - 高速编译器, 大约 300 000 行/分钟在P200! - 过程支持本地和全局变量结构...

    PHPYun_v4.3 CMS重装到Getshell.pdf

    - **问题根源**: `S_ROOT`常量被定义为`/install/`而非期望的根目录,导致锁文件判断失败。 - **代码示例**: ```php define('S_ROOT', dirname(FILE).DIRECTORY_SEPARATOR); ``` 3. **漏洞利用**: 直接访问`...

    Delphi数据库开发完美教程 第3章 Delphi的语法基础

    ##### 4.3 repeat-until - **定义**:repeat-until循环与while循环相似,但其测试条件在循环体之后,确保至少执行一次循环体。 - **语法**:`repeat 循环体 until 条件;` #### 五、过程与函数的创建与调用 过程和...

Global site tag (gtag.js) - Google Analytics