`
stephen830
  • 浏览: 2964672 次
  • 性别: 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  ...

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

    2023-03-31 项目笔记-第一阶段-1.什么是C语言 2.第一个C语言程序 3.数据类型 3.1 数据类型的大小 3.2类型的使用 4.变量、常量 4.1 定义变量的方法 4.2 变量的命名 4.2.1 变量是怎么变的 4.3 变量的分类

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

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

    PureBasic 4.3 Linux 版

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

    青创文章系统1.4.3.10.6.0 Build4.3

    1、修改了search.asp在查询时,没有附带条件的问题。... 3、common.asp中的符号bullet常量 4、sortmod.asp中的符号bullet常量 5、list.asp中的符号bullet常量 6、后台管理中标题前的图片或符号不管用的错误。

    自学C++教程-入门到精通的初步者

    4.3 C++ 中的左值(Lvalues)和右值(Rvalues) 5. 变量作用域 5.1 局部变量 5.2 全局变量 5.3 初始化局部变量和全局变量 6. 常量 6.1 整数常量 6.2 浮点常量 6.3 布尔常量 6.4 字符常量 6.5 字符串常量 6.6 定义...

    青创文章QcNews v1.4.3.10.6.0 Build4.3

    升级说明: 1、修改了search.asp在查询时,没有附带条件的... 3、common.asp中的符号bullet常量 4、sortmod.asp中的符号bullet常量 5、list.asp中的符号bullet常量 6、后台管理中标题前的图片或符号不管用的错误。

    PureBasic V4.3

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

    2023-03-31 项目笔记-第一阶段-4.变量、常量 4.3.1 变量的使用

    2023-03-31 项目笔记-第一阶段-1.什么是C语言 2.第一个C语言程序 3.数据类型 3.1 数据类型的大小 3.2类型的...变量、常量 4.1 定义变量的方法 4.2 变量的命名 4.2.1 变量是怎么变的 4.3 变量的分类 4.3.1 变量的使用

    2023-03-31 项目笔记-第一阶段-1.什么是C语言 2.第一个C语言程序 3.数据类型 4.变量、常量

    2023-03-31 项目笔记-第一阶段-1.什么是C语言 2.第一个C语言程序 3.数据类型 3.1数据类型的大小 3.2类型的使用 4.变量、常量 4.1定义变量的方法 4.2变量的命名 4.2.1变量是怎么变的 4.3变量的分类 4.3.1变量的使用

    高质量C\C++编程指南

    4.3 IF 语句 4.4 循环语句的效率 4.5 FOR 语句的循环控制变量 4.6 SWITCH 语句 4.7 GOTO 语句 第5 章常量 5.1 为什么需要常量 5.2 CONST 与#DEFINE 的比较 5.3 常量定义规则 5.4 类中的常量 第6 章函数设计 …………...

    Java基础 day01【前言、入门程序、常量、变量】

    day01 【前言、入门程序、常量、变量】第一章 开发语言1.1 Java语言概述什么是Java语言Java语言发展历史Java语言能做什么1.2 计算机基础知识二进制字节常用DOS命令第二章 ...常量4.1 概述4.2 分类4.3 练习第五章 变量

    C语言从入门到精通必备资料

    4.3 数据输入输出的概念及在C语言中的实现 54 4.4 字符数据的输入输出 54 4.4.1 putchar 函数(字符输出函数) 54 4.4.2 getchar函数(键盘输入函数) 55 4.5 格式输入与输出 55 4.5.1 printf函数(格式输出函数) ...

    十天学会易语言pdf资料

    4.3 如何使用常量 4.8 其他资源的调用 4.4 认识“易语言”资源表 4.9 课后练习 4.5 图片与图标组资源的使用 第5章 制作菜单 第6章 深入学习变量 第七章 使用组件 第8章 易语言的子程序 第9章 易模块 第10章 API函数...

    高质量c++编程指南

    4.3 if 语句... 27 4.4 循环语句的效率... 29 4.5 for 语句的循环控制变量... 30 4.6 switch语句... 30 4.7 goto语句... 31 第5章 常量... 33 5.1 为什么需要常量... 33 5.2 const 与 #define的比较... 33 ...

    C&C++编程规范(超级实用)

    4.3 if 语句 4.3.1 布尔变量与零值比较 4.3.2 整型变量与零值比较 4.3.3 浮点变量与零值比较 4.3.4 指针变量与零值比较 4.4 循环语句的效率 4.5 for 语句的循环控制变量 4.6 switch 语句 4.7 goto 语句 5. 常量 5.1 ...

    AS400 RLU编程wrod版

    4.3 定义一个常量字段 4.4 报表标题居中 4.5 往报表中加数据库字段 4.6 生成字段行 4.7 生成报表样本数据 4.8 保存报表设计生成打印文件 4.9 打印报表 第五章 定义一个复杂的报表——例子 5.1 用SEU生成数据库字段 ...

    基于ASP技术的动态电子商务网站设计

    4.3 定义全局常量和编写通用函数 30 4.3.1 定义全局常量 30 4.3.2 编写通用函数 30 4.4 用户注册模块 31 4.4.1 访问数据库的准备 31 4.4.2 登陆首页的制作 32 4.4.3 收集用户的个人信息 33 4.4.4 检查用户输入正确性...

Global site tag (gtag.js) - Google Analytics