1、创建文件 hello.go,不写入任何内容。运行 go build hello.go 命令进行编译。将会输出如下错误: can't load package: package main: hello.go:1:1: expected 'package', found 'EOF' 因为Go语言中,所有文件必须隶属于某一个包。需要在文件的头部声明一个package name,其中package为关键字,name为包名。 2、在hello.go文件中添加一条语句,之后重新进行编译。 添加内容如下: package main 执行编译,将会输出如下错误: runtime.main_main·f: relocation target main.main not defined runtime.main_main·f: undefined: "main.main" 因为Go程序启动时,需要在文件中有一个可标识入口。Go程序的入口函数是main函数。 3、在hello.go文件中添加另外一行,并且重试。 添加内容如下: package main func main(){} 执行运行命令 go run hello.go ,程序正确执行并很快就退出了。 到目前为止,我们已经创建了自己的第一个程序。虽然没有功能,但是已经可以正常运行了。 4、我们继续添加功能,添加内容如下: package main func main(){ Println("hello world") } 执行编译,将会输出如下错误: 1./hello.go:4:2: undefined: Println 因为Println函数存放在fmt包中。我们程序中没有主动引入fmt包,所以编译器报未定义错误。 如果我们需要使用这些包中的功能,首先需要import引入相应的包。包中的可导出组件可以通过 包名.组件名的方式进行调用。 函数Println和其它读写文本和字符的函数,都存放在一个叫做fmt的包中——formatting的缩写。 5、再添加几行代码,添加内容如下: package main import "fmt" func main(){ fmt.Println("hello world") } 执行 go run hello.go 命令,运行程序。运行结果如下: hello world Go 程序启动执行顺序如下: 按顺序导入所有被 main 包引用的其它包,然后在每个包中执行如下流程: 如果该包又导入了其它的包,则从第一步开始递归执行,但是每个包只会被导入一次。 然后以相反的顺序在每个包中初始化常量和变量,如果该包含有 init 函数的话,则调用该函数。 在完成这一切之后,main 也执行同样的过程,最后调用 main 函数开始执行程序。 |
|