在 Go 中,应用是按包来组织的。一个包就是位于同一个文件夹中的一组源文件。同一个文件夹里的所有源文件,文件顶部都必须使用相同的包名。按照惯例,包的名称与它所在的文件夹相同。
package greeting
Go 自带一个内容丰富的标准库,其中的包可以通过 import 关键字在你的程序中使用。标准库中的包用它们的名字来导入。
package greeting
import "fmt"
把多个包放进括号里,就可以一次导入它们。
package greeting
import (
"errors"
"fmt"
)
第三方包通过其所在位置的 URL 来导入。导入时还可以给包起一个别名,用来避免包名冲突:
package greeting
import (
"errors"
errs "github.com/pkg/errors"
)
导入之后,就用包名或别名来引用这个包:
// using the internal errors package
errors.New("Connection not established")
// using the errors package located at github.com/pkg/errors by alias
errs.New("Connection not established")
一个条目能否被其他包中的代码调用,取决于它是如何声明的。要让一个函数、类型、变量或常量在外部可见(称为 exported),名字就必须以大写字母开头。这类似于 Java 等其他编程语言使用 public 和 private 这类访问修饰符的做法。
package greeting
// Hello is a public function (callable from other packages).
func Hello(name string) string {
return "Hello " + name
}
// hello is a private function (not callable from other packages).
func hello(name string) string {
return "Hello " + name
}
自定义 struct 类型中的字段名也是如此:以大写字母开头的字段名在外部可见,以小写字母开头的不行。