Update golang_tutorial_05.md

pull/18/head
RickyWang1020 4 years ago committed by ShaoBo Wan(無尘)
parent ecc5c7f60f
commit 9550fbb11d

@ -66,7 +66,7 @@ error main.go:11: const initializer math.Sqrt(4) is not a constant.
const hello = "Hello World"
```
上面的代码将 "Hello World" 赋给一个名为 hello 的常量。那么现在常量** hello** 是不是就有了类型答案是No。hello 仍然没有类型。
上面的代码将 "Hello World" 赋给一个名为 `hello` 的常量。那么现在常量 `hello` 是不是就有了类型答案是No。`hello` 仍然没有类型。
Go是一种强类型语言。 所有变量都需要显式类型。 变量 `name` 被赋值为一个无类型的常量 `"Sam"`,它是如何工作的呢?
@ -84,7 +84,7 @@ func main() {
}
```
答案是无类型常量有一个默认的类型,当且仅当代码中需要无类型常量提供类型时,它才会提供该默认类型。在语句 `var name = "Sam" `中,`name`需要一个类型,因此它从常量 "Sam" 中获取其默认类型:`string`。
答案是无类型常量有一个默认的类型,当且仅当代码中需要无类型常量提供类型时,它才会提供该默认类型。在语句 `var name = "Sam" `中,`name`需要一个类型,因此它从常量 `"Sam"` 中获取其默认类型:`string`。
<u>(译者注:这里可以理解为常量是无类型的,但是在需要类型的场合,编译器会根据常量的值和上下文将常量转换为相应的类型。)</u>
@ -116,7 +116,9 @@ func main() {
接着我们创建了一个名为 `customName``myString` 类型的变量,并将常量 `"Sam"` 赋给它。因为常量 `"Sam"` 是无类型的所以可以将它赋值给任何字符串变量。因此这个赋值是合法的,`customName` 的类型是 `myString`
现在我们有两个变量string 类型的 `defaultName``myString` 类型的 `customName`。尽管我们知道 `myString` 是 string 的一个别名但是Go的强类型机制不允许将一个类型的变量赋值给另一个类型的变量。<u>**因此customName = defaultName 这个赋值是不允许的编译器会报错main.go:10: cannot use defaultName (type string) as type myString in assignment **</u>
现在我们有两个变量string 类型的 `defaultName``myString` 类型的 `customName`。尽管我们知道 `myString` 是 string 的一个别名但是Go的强类型机制不允许将一个类型的变量赋值给另一个类型的变量。
<u>因此customName = defaultName 这个赋值是不允许的编译器会报错main.go:10: cannot use defaultName (type string) as type myString in assignment </u>
## 布尔常量
@ -180,7 +182,7 @@ func main() {
在上面的程序中,所有变量的类型都是由数值常量决定的。在语法上看,`5` 在是一个整数,`5.6 `是一个浮点数,` 5 + 6i `是一个复数。运行上面的程序,输出为:`i's type int, f's type float64, c's type complex128`
<u>(译者注:编译器可以根据字面值常量的表现形式来确定它的默认类型,比如 5.6 表现为浮点数,因此它的默认类型为 float64 ,而 "Sam" 表现为字符串,因此它的默认类型为 stirng。</u>
<u>(译者注:编译器可以根据字面值常量的表现形式来确定它的默认类型,比如 5.6 表现为浮点数,因此它的默认类型为 float64 ,而 "Sam" 表现为字符串,因此它的默认类型为 string。</u>
现在应该很清楚下面的程序是如何工作的了:

Loading…
Cancel
Save