03 | 库源码文件
在我的定义中,库源码文件是不能被直接运行的源码文件,它仅用于存放程序实体,这些程序实体可以被其他代码使用(只要遵从 Go 语言规范的话)。
这里的“其他代码”可以与被使用的程序实体在同一个源码文件内,也可以在其他源码文件,甚至其他代码包中。
那么程序实体是什么呢?在 Go 语言中,程序实体是变量、常量、函数、结构体和接口的统称。我们总是会先声明(或者说定义)程序实体,然后再去使用。
比如在上一篇的例子中,我们先定义了变量name,然后在main函数中调用fmt.Printf函数的时候用到了它。
回到正题。
我们今天的问题是:怎样把命令源码文件中的代码拆分到其他库源码文件?
我们用代码演示,把这个问题说得更具体一些。
如果在某个目录下有一个命令源码文件 demo4.go,如下:
package main
import (
"flag"
)
var name string
func init() {
flag.StringVar(&name, "name", "everyone", "The greeting object.")
}
func main() {
flag.Parse()
hello(name)
}
其中的代码你应该比较眼熟了。我在讲命令源码文件的时候贴过很相似的代码,那个源码文件名为 demo2.go。
这两个文件的不同之处在于,demo2.go 直接通过调用fmt.Printf函数打印问候语,而当前的 demo4.go 在同样位置调用了一个叫作hello的函数。
函数hello被声明在了另外一个源码文件中,我把它命名为 demo4_lib.go,并且放在与 demo4.go 相同的目录下。如下:
// 需在此处添加代码。[1]
import "fmt"
func hello(name string) {
fmt.Printf("Hello, %s!\n", name)
}
那么问题来了:注释 1 处应该填入什么代码?
典型回答
答案很简单,填入代码包声明语句package main。为什么?我之前说过,在同一个目录下的源码文件都需要被声明为属于同一个代码包。
如果该目录下有一个命令源码文件&#x