mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-12 03:55:28 +08:00
Merge branch 'master' of github.com:Unknwon/the-way-to-go_ZH_CN
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
# 3.8 Go 性能说明
|
# 3.8 Go 性能说明
|
||||||
|
|
||||||
根据 Go 开发团队和基本的算法测试,Go 的性能大概在 C 语言的 10%~20% 之间( **译者注:由于出版时间限制,该数据应为 2013 年 3 月 28 日之前产生** )。虽然没有官方的性能标准,但是与其它各个语言相比已经拥有非常出色的表现。
|
根据 Go 开发团队和基本的算法测试,Go 语言与 C 语言的性能差距大概在 10%~20% 之间( **译者注:由于出版时间限制,该数据应为 2013 年 3 月 28 日之前产生** )。虽然没有官方的性能标准,但是与其它各个语言相比已经拥有非常出色的表现。
|
||||||
|
|
||||||
如果说 Go 语言的执行效率大约比 C++ 慢 20% 也许更有实际意义。保守估计在相同的环境和执行目标的情况下,Go 程序比 Java 或 Scala 应用程序要快上 2 倍,并比这两门语言使用少占用 70% 的内存。在很多情况下这种比较是没有意义的,因为像谷歌这样拥有成千上万台服务器的公司都抛弃 C++ 而开始将 Go 用于生产环境已经足够说明它本身所具有的优势。
|
如果说 Go 语言的执行效率大约比 C++ 慢 20% 也许更有实际意义。保守估计在相同的环境和执行目标的情况下,Go 程序比 Java 或 Scala 应用程序要快上 2 倍,并比这两门语言使用少占用 70% 的内存。在很多情况下这种比较是没有意义的,因为像谷歌这样拥有成千上万台服务器的公司都抛弃 C++ 而开始将 Go 用于生产环境已经足够说明它本身所具有的优势。
|
||||||
|
|
||||||
|
@@ -11,7 +11,7 @@ Go 语言的取地址符是 `&`,放到一个变量前使用就会返回相应
|
|||||||
下面的代码片段(Example 4.9 [pointer.go](examples/chapter_4/pointer.go))可能输出 `An integer: 5, its location in memory: 0x6b0820`(这个值随着你每次运行程序而变化)。
|
下面的代码片段(Example 4.9 [pointer.go](examples/chapter_4/pointer.go))可能输出 `An integer: 5, its location in memory: 0x6b0820`(这个值随着你每次运行程序而变化)。
|
||||||
|
|
||||||
var i1 = 5
|
var i1 = 5
|
||||||
fmt.Printf(“An integer: %d, it’s location in memory: %p\n”, i1, &i1)
|
fmt.Printf("An integer: %d, it's location in memory: %p\n", i1, &i1)
|
||||||
|
|
||||||
这个地址可以存储在一个叫做指针的特殊数据类型中,在本例中这是一个指向 int 的指针,即 `i1`:此处使用 *int 表示。如果我们想调用指针 intP,我们可以这样声明它:
|
这个地址可以存储在一个叫做指针的特殊数据类型中,在本例中这是一个指向 int 的指针,即 `i1`:此处使用 *int 表示。如果我们想调用指针 intP,我们可以这样声明它:
|
||||||
|
|
||||||
|
@@ -28,7 +28,7 @@ else-if 分支的数量是没有限制的,但是为了代码的可读性,还
|
|||||||
|
|
||||||
即使当代码块之间只有一条语句时,大括号也不可被省略(尽管有些人并不赞成,但这还是符合了软件工程原则的主流做法)。
|
即使当代码块之间只有一条语句时,大括号也不可被省略(尽管有些人并不赞成,但这还是符合了软件工程原则的主流做法)。
|
||||||
|
|
||||||
关键字 if 和 else 之后的左大括号 `{` 必须和关键字在同一行,如果你使用了 else-if 结构,则前段代码块的右大括号必须和 else-if 关键字在同一行。这两条规则都是被编译器强制规定的。
|
关键字 if 和 else 之后的左大括号 `{` 必须和关键字在同一行,如果你使用了 else-if 结构,则前段代码块的右大括号 `}` 必须和 else-if 关键字在同一行。这两条规则都是被编译器强制规定的。
|
||||||
|
|
||||||
非法的Go代码:
|
非法的Go代码:
|
||||||
|
|
||||||
@@ -46,13 +46,13 @@ else-if 分支的数量是没有限制的,但是为了代码的可读性,还
|
|||||||
Example 5.1 [booleans.go](examples/chapter_5/booleans.go)
|
Example 5.1 [booleans.go](examples/chapter_5/booleans.go)
|
||||||
|
|
||||||
package main
|
package main
|
||||||
import “fmt”
|
import "fmt"
|
||||||
func main() {
|
func main() {
|
||||||
bool1 := true
|
bool1 := true
|
||||||
if bool1 {
|
if bool1 {
|
||||||
fmt.Printf(“The value is true\n”)
|
fmt.Printf("The value is true\n")
|
||||||
} else {
|
} else {
|
||||||
fmt.Printf(“The value is false\n”)
|
fmt.Printf("The value is false\n")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user