Go从入门到精通——Go语言中程序文件的组织方法

Go语言中程序文件的组织方法

  Go 语言中,组织程序文件的方式主要是通过结合目录、包(package)与文件来实现的。

  Go 语言的代码文件中,第一行一般都是一个包的名称声明。例如,Hello world!程序中:

package main

import (
	"fmt"
)

func sayHello(s string) string {
	return "Hello " + s

}

func main() {
	fmt.Println(sayHello("abc"))
}

  第一条语句 package main 的作用是告诉 Go 语言编译器这个代码属于 main 包。

  在 Go 语言中,名字叫 main 的包是一个特殊的包,表示该包编译后生成一个可执行文件;反过来说,如果要编写一个能够被编译成可执行文件的程序,则代码必须在 main 包中(main包中可以使用其他包)。

  main 包中必须有一个名为 main 的函数(func 开头的一条语句定义了一个名字叫 main 的函数,后面一堆大括号括起来的内容就是这个函数具体的代码),这是程序起始执行的函数。其他名字的包编译后不会生成可执行文件,这些包一般是供其他包来调用的。

注意:

    与很多其他语言不通,Go 语言中每一条语句不必以分号 ";" 结尾。

  同一个包中可以有多个文件,这可以避免一个太大的代码文件,也可以更清晰地把代码分类组织在不同的文件中。

  同一目录下所有的代码文件只能属于同一个包,如果属于不通的包,编译时会提示有错误。也就是说,属于不同包的文件只能放在不通的目录下。

  main 包中不论有多少文件,其中的 main 函数有且只有一个,否则编译时也会提示有错误。

  下面我们将 Hello world 程序改写成具有两个文件的包,来验证上述内容。

  首先新建一个 packageTest 子目录,并在其中新建两个代码文件,分别命名为 sub.go 和 main.go,其中 sub.go 文件的代码如下:

package main

import (
	"fmt"
)

func hello() {
	fmt.Println("Hello world!")
}

  sub.go 代码中实际上仅仅定义了一个 hello 函数,作用是输出 "Hello world!"的字样。main.go 中的代码如下:

package main

func main() {
	hello()
}

  main.go 中所做的唯一一件事就是调用了 hello 函数。运行程序,无论使用 go run命令执行代码 main.go 还是 sub.go,都会提示有错误而不得不到想要的输出结果。这时候,需要在 go run 命令后带上所有的源代码作为参数才能够得到正确的执行结果,即执行 go run main.go sub.go 命令,如下:

  Go 语言中程序文件的组可以简单的概括如下:

  • Go 语言中,程序文件主要是按目录和包来组织的。
  • 每个包对应一个目录。
  • 每个包可以有多个代码文件。
  • 可执行包必须以 main 命名,其中应有且只能有一个 main 函数;一般的可执行程序都对应在一个目录下的 main 包,编译程序时将主要编译该包。
  • 可执行包生成的可执行文件是以目录名来命名的,生成的可执行文件的位置根据编译所用的命令不同有所不同,go build 命令将可执行文件生成在与代码文件名相同的目录下,go install 命令将可执行文件生成在 bin 目录下。
原文地址:https://www.cnblogs.com/zuoyang/p/15189928.html