【原创翻译】如何阅读一个GO程序

牧云@^-^@ 提交于 2020-03-03 00:47:02

让我们更细致地看看这个程序。Go程序是从上至下、从左到右阅读的(就像看书一样)。第一行是这样的:

package main

这一行叫做“包的声明”。每一个Go程序文件必须先进行包的声明。包是Go程序组织和复用代码的方式。Go程序分两种:可执行程序和库程序。可执行程序是我们可以在终端直接运行的程序(在Windows系统里,它们的后缀是.exe)。库程序是我们打包在一起的代码集合,以供其他程序使用。我们日后将深入谈到库程序,而现在我们只需要确保这一行代码必须包含在你写的所有程序中。

接下来的一行是空行。计算机用一个(或多个)特殊字符代表空行。换行、空格、制表符都被认为是空字符(因为我们看不见它们)。Go语言通常不关注空字符,我们只是用它让程序看起来更方便于阅读(你也可以删除这一个空行,这不会影响程序的运行)。

然后我们看到:

import "fmt"

import关键字用于将其他程序包引入到我们的程序中。fmt包(format的缩写)是用于将我们的输入输出内容格式化的。鉴于我们刚才提到关于包声明的内容,你觉得在fmt包的文件中,第一行写着的是什么呢?

我们发现fmt被双引号""包围着。像这样使用双引号的作用是声明字符串字面量,它是一种表达式。在Go语言中,字符串代表着一串具有明确长度的字符(字母、数字、符号等等)。我们将在下一章更详细地讲解字符串,而现在我们只需要记得一个重要的事情:字符串由一个双引号"开始,另一个双引号"结束,两者中间的所有字符就是字符串的内容(双引号本身并不是字符串的内容)。

以//为开头的那一行叫做注释。Go编译器将忽略注释的内容,注视只是给你自己看的(或者需要接手你源代码的人)。Go支持两种注释的方式:以//开头的注释将视整一行为注释的内容;以/*   */为开头和结尾的注释将所有包含在两个*号之间的内容视为注释的内容(而且还可以包含多行)。

接着你看到一个函数的声明:

func main() {
fmt.Println("Hello World")
}

函数是Go程序的构造块。它们有入口参数、返回参数和一系列称为程序语句的依次执行的步骤。所有的函数以func为开头,紧跟着是函数的名称(在这个例子中,函数叫做main)、用小括号()包起来的零个或以上的入口参数、可选的返回类型,还有一个被大括号{}包含着的“函数体”。这个程序没有入口参数,也不返回任何参数,而函数体里也只有一条程序语句。函数名称main有点特别,它是当你执行程序时被调用的函数。

最后,你看到这行代码:

fmt.Println("Hello World")

这个语句由三部分组成。首先我们调用了一个在fmt包中的叫做Println的函数(连起来写成fmt.Println,Println的意思是Print Line)。接下来我们创建了一个包含hello World字符的字符串,然后以这个字符串作为第一个同时也是唯一一个入口参数去调用(也叫呼叫或者执行)这个函数。

到此为止,我们已经看到了一些新术语,你估计也开始有点不知所措了。有些时候,刻意地大声念出你对程序的解读会有所帮助。

我们对以上你写的代码可以这样解读:

“创建一个新的可执行程序,它引用了fmt库并包含一个叫main的函数。这个函数没有入口参数,也不返回任何东西,却做了这些事情:使用了fmt包中的Println函数,并用Hello World字符串作为入口参数调用它。”

在你的程序中,Println函数产生了作用。你可以查看更多关于它的信息,只需要在终端中输入以下命令:

godoc fmt Println

在输出的内容之中,你会看到:

Println formats using the default formats for
its operands and writes to standard output.
Spaces are always added between operands and a
newline is appended. It returns the number of
bytes written and any write error encountered.

 Go是一门拥有优秀文档的编程语言。但是,除非你是本来已经对编程有一定基础,否则它的文档将难以被理解。不过godoc命令极其有用,当你遇到困难的时候,它也许是你解决问题的开始。

回到手里的函数,文档告诉你Println函数将你给它的东西输出到标准输出里——也就是你在用的终端输出。这个函数让Hello World字符串被显示了出来。

在下一章里,我们将探讨Go是怎样存储并且表示类似Hello World这些类型的。

原文地址:http://www.zingscript.com/translate/golang-book

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!