Go程序设计语言1.8 其他内容

简介:

1.8 其他内容


Go里面的东西远比这个快速入门中介绍的多。这里是一些很少提及或者完全忽略掉的主题,下面简单地介绍一下这些主题,以便读者在用到时能够熟悉这些内容。

控制流:我们前面介绍了两个基础的控制语句if和for,但没有介绍switch语句,它是多路分支控制。这里有一个例子:

 

coinflip的调用结果会和每一个条件的值进行比较。case语句从上到下进行推演,所以第一个匹配的case语句会被执行。如果没有其他的case语句符合条件,那么可选的默认case语句将被执行。默认case语句可以放在任何地方。case语句不像C语言那样从上到下贯穿执行(尽管有一个很少使用的fallthrough语句可以改写这个行为)。

switch语句不需要操作数,它就像一个case语句列表,每条case语句都是一个布尔表达式:

 

这种形式称为无标签(tagless)选择,它等价于switch true。

与for和if语句类似,switch可以包含一个可选的简单语句:一个短变量声明,一个递增或赋值语句,或者一个函数调用,用来在判断条件前设置一个值。

break和continue语句可以改变控制流。break可以打断for、switch或select的最内层调用,开始执行下面的语句。正如我们在1.3节中看到的,continue可以让for的内层循环开始新的迭代。语句可以标签化,这样方便break和continue引用它们来跳出多层嵌套的循环,或者执行最外层循环的迭代。这里还有一个goto语句,通常在机器生成的代码中使用,程序员一般不用它。

命名类型:type声明给已有类型命名。因为结构体类型通常很长,所以它们基本上都独立命名。一个熟悉的例子是定义一个2D图形系统的Point类型:

 

类型声明和命名将在第2章讲述。

指针:Go提供了指针,它的值是变量的地址。在一些语言(比如C)中,指针基本是没有约束的。其他语言中,指针称为“引用”,并且除了到处传递之外,它不能做其他的事情。Go做了一个折中,指针显式可见。使用&操作符可以获取一个变量的地址,使用*操作符可以获取指针引用的变量的值,但是指针不支持算术运算。这将在2.3.2节进行介绍。

方法和接口:一个关联了命名类型的函数称为方法。Go里面的方法可以关联到几乎所有的命名类型。方法在第6章讲述。接口可以用相同的方式处理不同的具体类型的抽象类型,它基于这些类型所包含的方法,而不是类型的描述或实现。接口是第7章的主题。

包:Go自带一个可扩展并且实用的标准库,Go社区创建和共享了更多的库。编程时,更多使用现有的包,而不是自己写所有的源码。本书将指出一些比较重要的标准库包,但是这些包太多了,本书无法一一展示,并且也无法提供诸如包的完整参考手册之类的东西。

在着手新程序前,看看是否已经有现成的包。可以在https://golang.org/pkg找到标准库包的索引,社区贡献的包可以在https://godoc.org找到。使用go doc工具可以方便地通过命令行访问这些文档:

 

注释:我们已经在程序或包的开始提到文档注释。在声明任何函数前,写一段注释来说明它的行为是一个好的风格。这个约定很重要,因为它们可以被go doc和godoc工具定位和作为文档显示(参考10.7.4节)。

对于跨越多行的注释,可以使用类似其他语言中的/*...*/注释。这样可以避免在文件的开始有一大块说明文本时每一行都有//。在注释内部,//和/*没有特殊的含义,所以注释不能嵌套。

相关文章

热门文章

最新文章