diff --git a/eBook/04.2.md b/eBook/04.2.md index 15be6c6..10541e1 100644 --- a/eBook/04.2.md +++ b/eBook/04.2.md @@ -2,12 +2,13 @@ ( ***译者注:由于 Go 语言版本更替,本节中的相关内容经原作者同意将被直接替换而不作另外说明*** ) Example 4.1 [hello_world.go](examples/chapter_4/hello_world.go) + package main import "fmt" func main() { - fmt.Println(“hello, world”) + fmt.Println("hello, world") } ##4.2.1 包,导入和可见性 @@ -51,16 +52,21 @@ _每一段代码只会被编译一次_ ___import “fmt”___ 告诉 Go 编译器,这个程序需要使用 fmt 包(的函数,或其他元素),fmt 包实现了格式化 IO(输入/输出)的函数。包名封闭在 `""` 中。从已编译的包中导入并加载公开声明方法,不用插入已编译包的源代码。 如果需要多个包,他们可以使用分隔声明,一个个的导入: + import “fmt” import “os” + 或: + import “fmt”; import “os” 但是更短并且更优雅的方法(称为_factoring the keyword_,同样适用于const,var 和 type)也是有的: + import ( "fmt" "os" ) + (它还可以更短:`import ("fmt", "os")`但是对于分发版本,gofmt后会强制换行) 当需要导入多个包时,它会按字母顺序排列包名。 @@ -91,11 +97,12 @@ ___pack1.Thing 和 pack2.Thing___ 一个包可以,也是有用的(为了更简短,名称冲突,...),也可以给予另一个名称(别名),如:`import fm "fmt"`。下面的代码使用了别名: Example 4.2 [alias.go](examples/chapter_4/alias.go) + package main - import fm “fmt” // alias3 + import fm "fmt" // alias3 func main() { - fm.Println(“hello, world”) + fm.Println("hello, world") } _提醒_:导入一个包,但是没有在代码中使用会导致一个构建错误(例如:导入但补使用的: os 包)。这遵循 Go 的格言:“没有不必要的代码!“ @@ -153,10 +160,11 @@ Print 和 Println 方法也支持变量,如:fmt.Println(arr);他们使用 ##4.2.3 注释 Example 4.2 [hello_world2.go](examples/chapter_4/hello_world2.go) + package main - import “fmt” // Package implementing formatted I/O. + import "fmt" // Package implementing formatted I/O. func main() { - fmt.Printf(“Καλημέρα κόσμε; or こんにちは 世界\n”) + fmt.Printf("Καλημέρα κόσμε; or こんにちは 世界\n") } 这说明了国际化字符 Καλημέρακόσμε; or こんにちは世界,可以打印,也可以用作注释使用。 @@ -168,6 +176,7 @@ Example 4.2 [hello_world2.go](examples/chapter_4/hello_world2.go) 每个包应该有包注释,注释块紧接 package 语句,介绍这个包并且提供相关信息,作整体功能介绍。一个包可以分散在多个文件中,但是注释只需要写在其中一个。当一个开发人员需要包的信息,使用 godoc,这些注释将被显示。其后的句子和段落可以给出更多的细节。注释句子应适当的空行。 例子: + // Package superman implements methods for saving the world. // // Experience has shown that a small number of procedures can prove @@ -177,6 +186,7 @@ Example 4.2 [hello_world2.go](examples/chapter_4/hello_world2.go) 几乎每一个顶层的类型,常数,变量,函数和每一个导出名都应该有注释。此注释(称为文档注释)出现在函数前面,如函数 Abcd 以:“Abcd...”开始。 例子: + // enterOrbit causes Superman to fly into low Earth orbit, a position // that presents several possibilities for planet salvation. func enterOrbit() error { @@ -218,11 +228,13 @@ godoc-tool (参见 §3.6) 收集这些注释并产生一个技术文档。 我们说 a 是 int 的基本类型,这使转型成为可能(参见 § 4.2.6)。 如果你有多个类型需要定义,可以使用多关键字形式,如: + type ( IZ int FZ float STR string ) + 每个值经过编译后必须有类型(编译器必须能够推断出所有值的类型): Go 语言是一种静态类型语言. @@ -238,6 +250,7 @@ Go 语言是一种静态类型语言. - 然后是剩下的函数,首先是类型的方法,或是 main() 函数中先后顺序调用的函数;或方法和功能,按字母顺序的方法和函数排序很高的。 Example 4.4 [gotemplate.go](examples/chapter_4/gotemplate.go) + package main import ( “fmt” @@ -259,12 +272,13 @@ Example 4.4 [gotemplate.go](examples/chapter_4/gotemplate.go) func Func1() { // exported function Func1 //... } + Go 程序的执行(程序启动)顺序如下: -(1)在 package main 中的包全部导入,按标明的顺序: -(2)如果导入包,(1)被这个包调用(递归),但是一个确定的包只会被导入一次 -(3)然后每一个包(以相反的顺序)中所有的常量和变量都被评估,如果它包含这个函数,将执行 init() 方法。 -(4)最后在 package main 中也一样,然后 main() 函数开始执行。 +(1)在 package main 中的包全部导入,按标明的顺序: +(2)如果导入包,(1)被这个包调用(递归),但是一个确定的包只会被导入一次 +(3)然后每一个包(以相反的顺序)中所有的常量和变量都被评估,如果它包含这个函数,将执行 init() 方法。 +(4)最后在 package main 中也一样,然后 main() 函数开始执行。 ##4.2.6 转型 @@ -274,6 +288,7 @@ Go 程序的执行(程序启动)顺序如下: 类型B的值 = 类型B(类型A的值) 例子: + a := 5.0 b := int(a) diff --git a/eBook/examples/chapter_4/alias.go b/eBook/examples/chapter_4/alias.go index 14c4321..87f5605 100644 --- a/eBook/examples/chapter_4/alias.go +++ b/eBook/examples/chapter_4/alias.go @@ -1,6 +1,6 @@ package main -import fm “fmt” // alias3 +import fm "fmt" // alias3 func main() { - fm.Println(“hello, world”) + fm.Println("hello, world") } diff --git a/eBook/examples/chapter_4/hello_world2.go b/eBook/examples/chapter_4/hello_world2.go index 0f9aaf5..cc6ff23 100644 --- a/eBook/examples/chapter_4/hello_world2.go +++ b/eBook/examples/chapter_4/hello_world2.go @@ -1,8 +1,8 @@ package main -import “fmt” // Package implementing formatted I/O. +import "fmt" // Package implementing formatted I/O. func main() { - fmt.Printf(“Καλημέρα κόσμε; or こんにちは 世界\n”) + fmt.Printf("Καλημέρα κόσμε; or こんにちは 世界\n") }