mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-12 03:06:41 +08:00
4.2.4.md
This commit is contained in:
@@ -155,7 +155,7 @@ main 函数是每一个可执行程序所必须包含的,一般来说都是在
|
||||
|
||||
程序正常退出的代码为 0 `Program exited with code 0`;如果程序因为异常而被终止,则会返回非零值,如:1。这个数值可以用来测试是否成功执行一个程序。
|
||||
|
||||
##4.2.3 注释QUESTION
|
||||
##4.2.3 注释
|
||||
Example 4.2 [hello_world2.go](examples/chapter_4/hello_world2.go)
|
||||
|
||||
package main
|
||||
@@ -164,15 +164,15 @@ Example 4.2 [hello_world2.go](examples/chapter_4/hello_world2.go)
|
||||
fmt.Printf("Καλημέρα κόσμε; or こんにちは 世界\n")
|
||||
}
|
||||
|
||||
这说明了国际化字符 Καλημέρακόσμε; or こんにちは世界,可以打印,也可以用作注释使用。
|
||||
上面这个例子通过打印 `Καλημέρα κόσμε; or こんにちは 世界` 展示了如何在 Go 中使用国际化字符,以及如何使用注释。
|
||||
|
||||
注释肯定不会被编译,但是他们被 godoc使用(参见 § 3.6)
|
||||
注释不会被编译,但可以通过 godoc 来使用(第 3.6 节)
|
||||
|
||||
行注释以`//`开始,可以在一行的开头或其他地方;这是最经常被使用的。多行注释也叫叫块注释以`/*`开始,以`*/`结束,不允许嵌套;这是用来包文档和注释代码。
|
||||
单行注释是最常见的注释形式,你可以在任何地方使用以 `//` 开头的单行注释。多行注释也叫块注释,均已以 `/*` 开头,并以 `*/` 结尾,且不可以嵌套使用,多行注释一般用于包的文档描述或注释成块的代码片段。
|
||||
|
||||
每个包应该有包注释,注释块紧接 package 语句,介绍这个包并且提供相关信息,作整体功能介绍。一个包可以分散在多个文件中,但是注释只需要写在其中一个。当一个开发人员需要包的信息,使用 godoc,这些注释将被显示。其后的句子和段落可以给出更多的细节。注释句子应适当的空行。
|
||||
每一个包应该有相关注释,在 package 语句之前的块注释将被默认认为是这个包的文档说明,其中应该提供一些相关信息并对整体功能做简要的介绍。一个包可以分散在多个文件中,但是只需要在其中一个进行注释说明即可。当开发人员需要了解包的一些情况时,自然会用 godoc 来显示包的文档说明,在首行的简要注释之后可以用成段的注释来进行更详细的说明,而不必拥挤在一起。另外,在多段注释之间应以空行分隔加以区分。
|
||||
|
||||
例子:
|
||||
示例:
|
||||
|
||||
// Package superman implements methods for saving the world.
|
||||
//
|
||||
@@ -180,9 +180,9 @@ Example 4.2 [hello_world2.go](examples/chapter_4/hello_world2.go)
|
||||
// helpful when attempting to save the world.
|
||||
package superman
|
||||
|
||||
几乎每一个顶层的类型,常数,变量,函数和每一个导出名都应该有注释。此注释(称为文档注释)出现在函数前面,如函数 Abcd 以:“Abcd...”开始。
|
||||
几乎所有全局作用域的类型、常量、变量、函数和被导出的对象都应该有一个合理的注释。如果这种注释(称为文档注释)出现在函数前面,例如函数 Abcd,则要以 "Abcd..." 作为开头。
|
||||
|
||||
例子:
|
||||
示例:
|
||||
|
||||
// enterOrbit causes Superman to fly into low Earth orbit, a position
|
||||
// that presents several possibilities for planet salvation.
|
||||
@@ -190,41 +190,43 @@ Example 4.2 [hello_world2.go](examples/chapter_4/hello_world2.go)
|
||||
...
|
||||
}
|
||||
|
||||
godoc-tool (参见 §3.6) 收集这些注释并产生一个技术文档。
|
||||
godoc 工具(第 3.6 节)会收集这些注释并产生一个技术文档。
|
||||
|
||||
##4.2.4 类型
|
||||
|
||||
变量(如常量)保持数据,数据可以是不同数据类型或者短整型。使用 var 声明的变量自动初始化为它的零值。类型定义了一系列值及操作,可以填充这些值。
|
||||
可以包含数据的变量(或常量)可以使用不同的数据类型或类型来保存数据。使用 var 声明的变量的值会自动初始化为该类型的零值。类型定义了某个变量的值的集合与可对其进行操作的集合。
|
||||
|
||||
类型可以是基本的(或原生的),如 int,float,bool,string,或结构的(或复合的),如 struct,array,slice,map,channel和insterface,他们只描述了类型的行为。
|
||||
类型可以是基本类型,如:int,float,bool,string;结构化的(复合的),如:struct,array,slice,map,channel;只描述类型的行为的,如:insterface。
|
||||
|
||||
结构化的类型没有真正的值时,它的值是 nil,这是这些类型的默认值(在 Objective-C 中是 nil,在 Java 中是 null,在 C 和 C++ 中是NULL或 0 )。Go 中没有类型继承。
|
||||
结构化的类型没有真正的值,它使用 nil 作为默认值(在 Objective-C 中是 nil,在 Java 中是 null,在 C 和 C++ 中是NULL或 0)。值得注意的是,Go 语言中不存在类型继承。
|
||||
|
||||
函数也可以是一个确定的类型,就是使用函数返回一个类型。返回类型写在函数名称和操作参数列表后面,如:
|
||||
函数也可以是一个确定的类型,就是以函数作为返回类型。这种类型的声明要写在函数名和可选的参数列表之后,例如:
|
||||
|
||||
func FunctionName (a typea, b typeb) typeFunc
|
||||
|
||||
返回 typeFunc 类型的变量 var 可以在函数的某处声明:
|
||||
你可以在函数体中的某处返回使用类型为 typeFunc 的变量 var:
|
||||
|
||||
return var
|
||||
|
||||
函数可以返回多个变量,并且返回类型使用逗号分隔和小括号`( )`包围,如:func FunctionName (a typea, b typeb) (t1 type1, t2 type2)
|
||||
一个函数可以拥有多返回值,返回类型之间需要使用逗号分割,并使用小括号 `( )` 将它们括起来,如:`func FunctionName (a typea, b typeb) (t1 type1, t2 type2)`
|
||||
|
||||
列子: 函数 Atoi (参见 § 4.7): func Atoi(s string) (i int, err error)
|
||||
示例: 函数 Atoi (第 4.7 节):`func Atoi(s string) (i int, err error)`
|
||||
|
||||
返回的形式为: return var1, var2
|
||||
返回的形式:`return var1, var2`
|
||||
|
||||
这是经常当成功(真/假)执行一个函数或错误信息与返回值一起返回时使用(见下面的多分配)。
|
||||
这种多返回值一般用于判断某个函数是否执行成功(true/false)或与其它返回值一同返回错误消息(详见之后的并行赋值)。
|
||||
|
||||
使用 type 关键字定义你自己的类型。然后你可能像定义一个结构体(参见 第10章),但是也可能定义一个存在的类型的别名,如:
|
||||
使用 type 关键字可以定义你自己的类型,你可能想要定义一个结构体(第 10 章),但是也可以定义一个已经存在的类型的别名,如:
|
||||
|
||||
type IZ int
|
||||
|
||||
然后我们可以定义变量如:var a IZ = 5
|
||||
( ***译者注:这里并不是真正意义上的别名,因为使用这种方法定义之后的类型可以拥有更多的特性,且在类型转换时必须显式转换*** )
|
||||
|
||||
我们说 a 是 int 的基本类型,这使转型成为可能(参见 § 4.2.6)。
|
||||
然后我们可以像 `var a IZ = 5` 这样声明变量。
|
||||
|
||||
如果你有多个类型需要定义,可以使用多关键字形式,如:
|
||||
这里我们可以看到 int 是变量 a 的底层类型,这也使得它们之间存在相互转换的可能(第 4.2.6 节)。
|
||||
|
||||
如果你有多个类型需要定义,可以使用因式分解关键字的方式,例如:
|
||||
|
||||
type (
|
||||
IZ int
|
||||
@@ -232,9 +234,7 @@ godoc-tool (参见 §3.6) 收集这些注释并产生一个技术文档。
|
||||
STR string
|
||||
)
|
||||
|
||||
每个值经过编译后必须有类型(编译器必须能够推断出所有值的类型):
|
||||
|
||||
Go 语言是一种静态类型语言.
|
||||
每个值都必须在经过编译后属于某个类型(编译器必须能够推断出所有值的类型),因为 Go 语言是一种静态类型语言。
|
||||
|
||||
##4.2.5 Go 编程的一般结构
|
||||
|
||||
|
Reference in New Issue
Block a user