mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-12 00:11:36 +08:00
add 04.3.md translate for ch 4.3
with original english.
This commit is contained in:
152
eBook/04.3.md
Normal file
152
eBook/04.3.md
Normal file
@@ -0,0 +1,152 @@
|
||||
#4.3 常量
|
||||
( ***译者注:由于 Go 语言版本更替,本节中的相关内容经原作者同意将被直接替换而不作另外说明*** )
|
||||
|
||||
A constant const contains data which does not change.
|
||||
|
||||
常量 const 用于存储不能改变的数据。
|
||||
|
||||
|
||||
This data can only be of type boolean, number (integer, float or complex) or string.
|
||||
|
||||
常量的数据类型只能是布尔型,数值型(整型,浮点型或复数型)或字符串型。
|
||||
|
||||
|
||||
It is defined as follows: `const identifier [type] = value` , for example: `const Pi = 3.14159`
|
||||
|
||||
像如下定义:`const identifier [type] = value` ,例如:`const Pi = 3.14159`
|
||||
|
||||
The type specifier `[type]` is optional, the compiler can implicitly derive the type from the value.
|
||||
|
||||
类型说明符 `[type]` 是可选项,编译器可以从值中隐式推导出类型。
|
||||
|
||||
Explicit typing example: `const b string = "abc"`
|
||||
Implicit typing example: `const b = "abc"`
|
||||
|
||||
显示类型定义例子: `const b string = "abc"`
|
||||
隐式类型定义例子: `const b = "abc"`
|
||||
|
||||
A value derived from an untyped constant becomes typed when it is used within a context that requires a typed value (otherwise formulated: an untyped constant takes the type needed by its context):
|
||||
|
||||
当一个值在一个要求有类型值的上下文中,它需要从无类型推导出类型(规定:一个无类型的常量从上下文中确定其类型)
|
||||
|
||||
var n int
|
||||
f(n + 5) // untyped numeric constant “5” becomes typed as int
|
||||
|
||||
Constants must be evaluated at compile time; a const can be defined as a calculation, but all the values necessary for the calculation must be available at compile time.
|
||||
|
||||
常量必须在编译时能够被推导出;一个常量可以用一个计算定义,但是所有需要计算的值在编译期必须可用。
|
||||
|
||||
So this is ok: `const c1 = 2/3`
|
||||
this is NOT: `const c2 = getNumber() // gives the build error: getNumber() used as value`
|
||||
|
||||
所以这样是正确的: `const c1 = 2/3`
|
||||
这样是**错误**的: `const c2 = getNumber() // 得到构建错误: getNumber() used as value`
|
||||
|
||||
Numeric constants have no size or sign, can be of arbitrary high precision and do no overflow:
|
||||
|
||||
数字常量没有大小和符号的,可以是任意精度而且不会溢出:
|
||||
|
||||
const Ln2= 0.693147180559945309417232121458\
|
||||
176568075500134360255254120680009
|
||||
const Log2E= 1/Ln2 // this is a precise reciprocal
|
||||
const Billion = 1e9 // float constant
|
||||
const hardEight = (1 << 100) >> 97
|
||||
|
||||
As demonstrated `\` can be used as a continuation character in a constant.
|
||||
|
||||
如上例证明 `\` 可以被用作常量的连字符。
|
||||
|
||||
In contrast to numeric variables of different types, with constants you don’t have to worry about conversions: they are like ideal numbers.
|
||||
|
||||
相比于数字变量的不同类型,使用常量你不必担心转型:他们就像是理想中的数字。
|
||||
|
||||
Constants can overflow only when they are assigned to a numeric variable with too little precision to represent the value, this results in a compile error. Multiple assignment is allowed, like in:
|
||||
|
||||
常量会溢出,只有当他们被分配的数字变量精度太少,这将导致一个编译错误。多重赋值是允许的,比如:
|
||||
|
||||
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
|
||||
)
|
||||
|
||||
Constants can be used for enumerations:
|
||||
|
||||
常量可以用作枚举:
|
||||
|
||||
const (
|
||||
Unknown = 0
|
||||
Female = 1
|
||||
Male = 2
|
||||
)
|
||||
|
||||
Unknown, Female, Male are now aliases for 0, 1 and 2. They can in effect be used to test for these values, like in a switch / case construct (§ 5.3).
|
||||
|
||||
Unknown, Female, Male 现在是 0, 1 和 2 的别名. 他们可以使用去测试实际值,比如使用一个 switch / case 结构 (§ 5.3).
|
||||
|
||||
In such cases, the value iota can be used to enumerate the values:
|
||||
|
||||
在这个例子中,`iota` 可以被用作枚举值:
|
||||
|
||||
const (
|
||||
a = iota
|
||||
b = iota
|
||||
c = iota
|
||||
)
|
||||
|
||||
The first use of iota gives 0, whenever iota is used again on a new line, its value is incremented by 1; so a=0, b=1, c=2. This can be shortened to:
|
||||
|
||||
第一个 `iota` 等于 0,无论 `iota` 是否在新的一行使用,它的值都会自动加 1;所以 `a=0, b=1, c=2` 。可以简写为:
|
||||
|
||||
const (
|
||||
a = iota
|
||||
b
|
||||
c
|
||||
)
|
||||
|
||||
iota can also be used in an expression, like iota + 50. A new const block or declaration initializes iota back to 0.
|
||||
|
||||
`iota` 也可以用在表达式中,如 `iota + 50`。一个新的常量块或声明将 `iota` 重新初始化为 0。
|
||||
|
||||
Of course, the value of a constant cannot change during the execution of the program; doing so is prevented by a compiler error: cannot assign to value, where value is the value of the constant.
|
||||
|
||||
当然,常量的值在程序的执行过程中不能被改变;这么做是为了避免编译错误:当一个值是常量,他不能被赋值。
|
||||
|
||||
An example from the time package: the names for the days of the week:
|
||||
|
||||
`time`包的一个例子:一周的每天的名称:
|
||||
|
||||
const (
|
||||
Sunday = iota
|
||||
Monday
|
||||
Tuesday
|
||||
Wednesday
|
||||
Thursday
|
||||
Friday
|
||||
Saturday
|
||||
)
|
||||
|
||||
You can give the enumeration a type name like in this example:
|
||||
|
||||
你可以给枚举一个类型名,像这个例子:
|
||||
|
||||
type Color int
|
||||
const (
|
||||
RED Color = iota // 0
|
||||
ORANGE // 1
|
||||
YELLOW // 2
|
||||
GREEN // ..
|
||||
BLUE
|
||||
INDIGO
|
||||
VIOLET // 6
|
||||
)
|
||||
|
||||
Remark: There is a convention to name constant identifiers with all uppercase letters, like: `const INCHTOwCM = 2.54`; this improves readability and can be used as long as it is not in conflict with the Visibility Rule of §4.2
|
||||
|
||||
备注:有一个约定:常量标识符全部使用大写字母,如:`const INCHTOwCM = 2.54`;这增强了可读性并且不会与 §4.2 描述的可见性规则冲突。
|
||||
|
||||
##链接
|
||||
- [目录](directory.md)
|
||||
- 上一部分:[Go 程序的基本结构和要素](04.2.md)
|
||||
- 下一节:[变量](04.4.md)
|
Reference in New Issue
Block a user