包声明

在 Go 语言中,一个源码文件必须以一个包声明语句开始。包声明语句指定了该文件属于哪个包,并在这个包的范围内定义了变量、常量、类型和函数等。每个 Go 语言源文件都属于一个包,且它只能属于单一的包。

package packageName

其中 packageName 是包名,必须是标识符(大小写敏感)。

如果一个程序文件声明了 package main,则它表示这个程序是可执行程序,而不是一个库。其他的文件应该声明自己属于哪个包,来表明他们是库文件。

package main

import "fmt"

func main() {
  fmt.Println("hello world")
}

包导入

在 Go 语言中,使用 import 关键字导入包。可以单独导入,也可以批量导入。导入的包可以是内建包、标准库包,也可以是第三方包。如果包名与目录名不同,将使用目录名。导入的包会被编译器自动安装到工作目录下的 pkg 和 bin 目录中。

常见的导入方式有两种:

  • 单独导入
import "fmt"
  • 批量导入
import (
    "fmt"
    "io/ioutil"
)

如果批量导入多个包中有相同的引用名称,则需要使用别名。

import (
    "fmt"
    m "math" // 给 math 包起别名 m
)

空白导入

在 Go 语言中,导入一个包后,编译器会检查是否使用了该包的任何函数或变量,如果没有,则会产生编译错误。而在某些情况下,我们只是想让编译器将这个包安装到 pkg 和 bin 目录中,而不是要使用其中的函数或变量。这种情况下,就需要使用空白导入了。在导入语句中,用_来表示空白标识符。

import _ "github.com/some/package"

包命名

包名应该简短、有意义,且采用小写字母(不要使用下划线或混用大小写)。不要使用与 Go 关键字相同的名称,并避免使用与内建类型相同的名称。 缩写的命名应该遵循大小写规则,例如,URL 应该写成 url。包名应该尽量保持简洁,但同时要能够清晰地反映出包所提供的功能。

在 Go 语言中,导入的包名可以使用别名,这也是一个很好的命名方式,因为不同的导入路径可能会有相同的包名。别名应该是清晰、简短的单词,例如,将 database/sql 包命名为 db 是一个常见的做法。