非执行包与包的引用

  对应于可执行包,还有一种包叫作非执行包,也就是包名不是 main 的包。这种包不能被编译成可执行文件,它存在的目的主要是将一些有用的功能函数集中在一起供其他包调用。一般会将同为某一目的开发的多个函数或同属某个功能分类的函数合起来做一个包。

  例如,我们在 Hello world 程序中调用 fmt 就是 Go 语言标准库中提供的一个包,其中包括了多个用于输入或输出信息的函数,在 Go 语言开发中非常有用。

  在用 Go 语言编写的某个包的代码中,如果要调用其他包中的函数,需要"引用"(也可以称作 "导入","声明")这个包。例如,在 Hello world 程序中,用下述几行代码对 fmt 包进行了引用。

import (
    "fmt"
)

  以 import 开始,包含在一对圆括号中,以双引号括起来的一行就是在程序中需要引用的包。本例中仅导入了 fmt 一个包,如果要调用 fmt 的函数,需要用 "包名+.+函数名" 的方式调用,例如:

fmt.Println("Hello world!")

  这条语句就调用了 fmt 包中的 Println 函数,函数后面的圆括号中是传递给该函数的参数。Println 函数的作用是将传递给它的参数输出到命令行界面上,并且后面再输出一个换行符(也就是输出一行文字后再多一个换行)。

  如果程序中需要应用多个包,每一个包在 import 语句的圆括号中增加一行即可:

import(
   "fmt"
   "os"
)

  因此 fmt 和 os 在 import 语句中各占了一行,注意引用的包名都需要放在一对双引号中。

  另外,Go 语言中严格规定不允许引用未在代码中使用的包。也就是说,如果在没有使用包中任何函数或其他内容的情况下引用了某包,编译的时候将会报错并无法编译通过。这是 Go 语言与大多数开发语言不同的地方,在其他非主流语言中,这种情况一般只会有一个提示告警,而不会导致编译执行失败。