mirror of
https://github.com/gopl-zh/gopl-zh.github.com.git
synced 2025-12-17 19:24:19 +08:00
make zh2tw
This commit is contained in:
@@ -1,15 +1,15 @@
|
||||
## 3.6. 常量
|
||||
|
||||
|
||||
常量表达式的值在编译期计算, 而不是在运行期. 每种常量的潜在类型都是基础类型: boolean, string, 或数字.
|
||||
常量表達式的值在編譯期計算, 而不是在運行期. 每種常量的潛在類型都是基礎類型: boolean, string, 或數字.
|
||||
|
||||
一个常量的声明语句定义了常量的名字, 和变量的声明语法类似, 常量的值不可修改, 这样可以防止在运行期被意外或恶意的修改. 例如, 常量比变量更适合用于表达像 π 之类的数学常数, 因为它们的值不会变化:
|
||||
一個常量的聲明語句定義了常量的名字, 和變量的聲明語法類似, 常量的值不可脩改, 這樣可以防止在運行期被意外或惡意的脩改. 例如, 常量比變量更適合用於表達像 π 之類的數學常數, 因爲它們的值不會變化:
|
||||
|
||||
```Go
|
||||
const pi = 3.14159 // approximately; math.Pi is a better approximation
|
||||
```
|
||||
|
||||
和变量声明一样, 可以批量声明多个常量; 这比较适合声明一组相关的常量:
|
||||
和變量聲明一樣, 可以批量聲明多個常量; 這比較適合聲明一組相關的常量:
|
||||
|
||||
```Go
|
||||
const (
|
||||
@@ -18,11 +18,11 @@ const (
|
||||
)
|
||||
```
|
||||
|
||||
许多常量的运算可以在编译期完成, 这样可以减少运行时的工作, 也方便其他编译优化. 当操作数是常量时, 一些运行时的错误可以在编译时发现, 例如整数除零, 字符串索引越界, 任何导致无效浮点数的操作等.
|
||||
許多常量的運算可以在編譯期完成, 這樣可以減少運行時的工作, 也方便其他編譯優化. 當操作數是常量時, 一些運行時的錯誤可以在編譯時發現, 例如整數除零, 字符串索引越界, 任何導致無效浮點數的操作等.
|
||||
|
||||
常量间的所有算术运算, 逻辑运算和比较运算的结果也是常量, 对常量的类型转换操作或以下函数调用都是返回常量结果: len, cap, real, imag, complex, 和 unsafe.Sizeof(§13.1).
|
||||
常量間的所有算術運算, 邏輯運算和比較運算的結果也是常量, 對常量的類型轉換操作或以下函數調用都是返迴常量結果: len, cap, real, imag, complex, 和 unsafe.Sizeof(§13.1).
|
||||
|
||||
因为它们的值是在编译期就确定的, 因此常量可以是构成类型的一部分, 例如用于指定数组类型的长度:
|
||||
因爲它們的值是在編譯期就確定的, 因此常量可以是構成類型的一部分, 例如用於指定數組類型的長度:
|
||||
|
||||
```Go
|
||||
const IPv4Len = 4
|
||||
@@ -34,7 +34,7 @@ func parseIPv4(s string) IP {
|
||||
}
|
||||
```
|
||||
|
||||
一个常量的声明也可以包含一个类型和一个值, 但是如果没有显式指明类型, 那么将从右边的表达式推断类型. 在下面的代码中, time.Duration 是一个命名类型, 底层类型是 int64, time.Minute 是对应类型的常量. 下面声明的两个常量都是 time.Duration 类型, 可以通过 %T 参数打印类型信息:
|
||||
一個常量的聲明也可以包含一個類型和一個值, 但是如果沒有顯式指明類型, 那麽將從右邊的表達式推斷類型. 在下面的代碼中, time.Duration 是一個命名類型, 底層類型是 int64, time.Minute 是對應類型的常量. 下面聲明的兩個常量都是 time.Duration 類型, 可以通過 %T 參數打印類型信息:
|
||||
|
||||
```Go
|
||||
const noDelay time.Duration = 0
|
||||
@@ -44,7 +44,7 @@ fmt.Printf("%T %[1]v\n", timeout) // "time.Duration 5m0s
|
||||
fmt.Printf("%T %[1]v\n", time.Minute) // "time.Duration 1m0s"
|
||||
```
|
||||
|
||||
如果是批量声明的常量, 除了第一个外其他常量的右边的表发生可以省略, 如果省略则表示使用前面的表达式, 对应的常量类型也一样. 例如:
|
||||
如果是批量聲明的常量, 除了第一個外其他常量的右邊的表發生可以省略, 如果省略則表示使用前面的表達式, 對應的常量類型也一樣. 例如:
|
||||
|
||||
```Go
|
||||
const (
|
||||
@@ -57,7 +57,7 @@ const (
|
||||
fmt.Println(a, b, c, d) // "1 1 2 2"
|
||||
```
|
||||
|
||||
如果只是简单地复制右边的常量表达式, 并没有太实用的价值. 但是它可以带来其他的特性, 那就是 iota 常量生成器.
|
||||
如果隻是簡單地複製右邊的常量表達式, 併沒有太實用的價值. 但是它可以帶來其他的特性, 那就是 iota 常量生成器.
|
||||
|
||||
{% include "./ch3-06-1.md" %}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user