make zh2tw

This commit is contained in:
chai2010
2015-12-21 12:52:25 +08:00
parent 14665b4d9c
commit d024df28e9
7 changed files with 131 additions and 131 deletions

View File

@@ -1,15 +1,15 @@
### 3.6.2. 無類型常量
Go言的常量有点不寻常. 然一常量可以有任意有一个确定的基础类型, 例如 int 或 float64, 或者是似 time.Duration 这样命名的基础类型, 但是多常量并没有一个明确的基础类型. 编译期为这些没有明的基础类型的字常量提供比基础类型或器更高精度的算术运算; 你可以认为至少有256bit的算精度. 里有六未明确类型的常量型, 分别是 无类型的布型, 无类型的整, 无类型的字符, 无类型的浮点数, 无类型的复数, 无类型的字符串.
Go言的常量有點不尋常. 然一常量可以有任意有一個確定的基礎類型, 例如 int 或 float64, 或者是似 time.Duration 這樣命名的基礎類型, 但是多常量併沒有一個明確的基礎類型. 編譯期爲這些沒有明的基礎類型的字常量提供比基礎類型或器更高精度的算術運算; 你可以認爲至少有256bit的算精度. 里有六未明確類型的常量型, 分别是 無類型的布型, 無類型的整, 無類型的字符, 無類型的浮點數, 無類型的複數, 無類型的字符串.
过延迟明确具体类型, 无类型的常量不可以提供更高的精度, 而且可以直接用更多的表式而不需要类型转换. 例如 例子中的 ZiB 和 YiB 的值已经超出任何Go中整数类型能表的范, 但是它依然是合法的常量, 而且可以像下面表达式这样使用:
過延遲明確具體類型, 無類型的常量不可以提供更高的精度, 而且可以直接用更多的表式而不需要類型轉換. 例如 例子中的 ZiB 和 YiB 的值已經超齣任何Go中整數類型能表的范, 但是它依然是合法的常量, 而且可以像下面表達式這樣使用:
```Go
fmt.Println(YiB/ZiB) // "1024"
```
另一例子, math.Pi 无类型的浮点数常量, 可以直接用任意需要浮点数或复数的地方:
另一例子, math.Pi 無類型的浮點數常量, 可以直接用任意需要浮點數或複數的地方:
```Go
var x float32 = math.Pi
@@ -17,7 +17,7 @@ var y float64 = math.Pi
var z complex128 = math.Pi
```
如果 math.Pi 被确定为特定型, 比如 float64, 那么结果精度可能不一, 同时对于需要float32或complex128型值的地方需要一个明确的类型转换:
如果 math.Pi 被確定爲特定型, 比如 float64, 那麽結果精度可能不一, 同時對於需要float32或complex128型值的地方需要一個明確的類型轉換:
```Go
const Pi64 float64 = math.Pi
@@ -27,9 +27,9 @@ var y float64 = Pi64
var z complex128 = complex128(Pi64)
```
对于常量面值, 不同的写法对应不同的型. 例如 0, 0.0, 0i, 和 '\u0000' 然有着相同的常量值, 但是它分别对应无类型的整数,无类型的浮点数,无类型的复数,和无类型的字符等不同的常量型. 同, true 和 false 也是无类型的布尔类型, 字符串面值常量是无类型的字符串.
對於常量面值, 不同的寫法對應不同的型. 例如 0, 0.0, 0i, 和 '\u0000' 然有着相同的常量值, 但是它分别對應無類型的整數,無類型的浮點數,無類型的複數,和無類型的字符等不同的常量型. 同, true 和 false 也是無類型的布爾類型, 字符串面值常量是無類型的字符串.
前面说过除法算符 / 根操作数的类型生成对应类型的果. 因此, 不同法的常量除法表式可能对应不同的果:
前面説過除法算符 / 根操作數的類型生成對應類型的果. 因此, 不同法的常量除法表式可能對應不同的果:
```Go
var f float64 = 212
@@ -38,7 +38,7 @@ fmt.Println(5 / 9 * (f - 32)) // "0"; 5/9 is an untyped integer, 0
fmt.Println(5.0 / 9.0 * (f - 32)) // "100"; 5.0/9.0 is an untyped float
```
有常量可以是无类型的. 当一个无类型的常量被赋值给一个变量, 就像上面的第一行句, 或者是像其余三个语句中右边表达式中含有明确类型的值, 无类型的常量将会被隐式转换为对应的类型, 如果可能的.
有常量可以是無類型的. 當一個無類型的常量被賦值給一個變量, 就像上面的第一行句, 或者是像其餘三個語句中右邊表達式中含有明確類型的值, 無類型的常量將會被隱式轉換爲對應的類型, 如果可能的.
```Go
var f float64 = 3 + 0i // untyped complex -> float64
@@ -47,7 +47,7 @@ f = 1e123 // untyped floating-point -> float64
f = 'a' // untyped rune -> float64
```
上面的句相当于:
上面的句相當於:
```Go
var f float64 = float64(3 + 0i)
@@ -56,7 +56,7 @@ f = float64(1e123)
f = float64('a')
```
无论是隐式或式, 将一种类型转换为另一种类型要求目可以表示原始值. 对于浮点数和复数, 可能有舍入理:
無論是隱式或式, 將一種類型轉換爲另一種類型要求目可以表示原始值. 對於浮點數和複數, 可能有舍入理:
```Go
const (
@@ -70,7 +70,7 @@ const (
)
```
对于一个没有显式类型的变量声明(包括短变量声明语法), 无类型的常量会被隐式转为默认的变量类型, 就像下面的例子:
對於一個沒有顯式類型的變量聲明(包括短變量聲明語法), 無類型的常量會被隱式轉爲默認的變量類型, 就像下面的例子:
```Go
i := 0 // untyped integer; implicit int(0)
@@ -79,16 +79,16 @@ f := 0.0 // untyped floating-point; implicit float64(0.0)
c := 0i // untyped complex; implicit complex128(0i)
```
意默认类型是规则的: 无类型的整常量默认转换为int, 对应不确定的尺寸, 但是浮点数好复数常量则默认转换为float64和complex128. Go言本身并没有不定的尺寸的浮点数和复数类型, 因如何不知道浮点数类型的话很难写出正确的数值算法.
意默認類型是規則的: 無類型的整常量默認轉換爲int, 對應不確定的尺寸, 但是浮點數好複數常量則默認轉換爲float64和complex128. Go言本身併沒有不定的尺寸的浮點數和複數類型, 因如何不知道浮點數類型的話很難寫齣正確的數值算法.
如果要给变量一不同的型, 我们必须显式地将无类型的常量转化为所需的型, 或给声明的量指定型, 像下面例子这样:
如果要給變量一不同的型, 我們必鬚顯式地將無類型的常量轉化爲所需的型, 或給聲明的量指定型, 像下面例子這樣:
```Go
var i = int8(0)
var i int8 = 0
```
当尝试将这些无类型的常量转为一个接口值时(见第7章), 些默认类型将显得尤重要, 因要靠它们明确接口对应的动态类型.
當嚐試將這些無類型的常量轉爲一個接口值時(見第7章), 些默認類型將顯得尤重要, 因要靠它們明確接口對應的動態類型.
```Go
fmt.Printf("%T\n", 0) // "int"
@@ -97,7 +97,7 @@ fmt.Printf("%T\n", 0i) // "complex128"
fmt.Printf("%T\n", '\000') // "int32" (rune)
```
在我们已经讲述了Go言中全部的基础数据类型. 下一步演示如何用基础数据类型组合成数组或结构体等复杂数据类型, 然后构建用于解决实际编程问题的数据结构, 这将是第四章的讨论主题.
在我們已經講述了Go言中全部的基礎數據類型. 下一步演示如何用基礎數據類型組合成數組或結構體等複雜數據類型, 然後構建用於解決實際編程問題的數據結構, 這將是第四章的討論主題.