3. 打包和工具链(Go Tutorial)

来源:互联网 发布:企业海关数据免费查询 编辑:程序博客网 时间:2024/06/01 09:09

打包和工具链(Go Tutorial)

  • 1 包
    • 11 包名惯例
    • 12 main 包
  • 2 导入
    • 21 远程导入
    • 22 命名导入
  • 3 函数 init
  • 4 使用 Go 工具
  • 5 进一步介绍 Go 开发工具
    • 51 go vet
    • 52 Go 代码格式化
    • 53 Go 语言文档
  • 7 依赖管理

3.1 包

所有 Go 语言的程序都会组织成若干组文件,每组文件被称为一个包。这样每个包的代码都可以作为很小的复用单元,被其他项目引用。

所有的 .go 文件,除了空行和注释,都应该在第一行声明自己所属的包。

同一目录下的所有 .go 文件必须声明为同一个包。不同包需放在不同的目录下。

3.1.1 包名惯例

  • 包名应该使用目录名
  • 包名需使用简洁、清晰且全小写的名字
  • 并不需要所有包的名字都与别的包名不同,因为导入包时使用的是全路径,所以可区分同名的不同包
  • 包导入后会使用默认的包名,但也可修改导入后的包名

3.1.2 main 包

在 Go 语言里,命名为 main 的包具有特殊的含义。Go 语言的编译承训会试图把这种名字为 main 的包编译为可执行文件。所有用 Go 语言编译的可执行程序都必须有一个名叫 main 的包。

如果 main 包里没有定义 main() 函数,那么程序就无法运行,也无法编译成可执行程序。

3.2 导入

import 语句会告诉编译器到磁盘的哪里去找想要导入的包。如果需要导入多个包,习惯上是将 import 语句包装在一个导入块中。

import (  "fmt"  "strings")

编译器会使用 Go 环境变量设置的路径,通过引入的相对路径来查找磁盘上的包。

  • 标准库中的包会在安装 Go 的位置找到
  • Go 开发者创建的包会在 GOPATH 环境变量指定的目录里查找

需要注意的是,一旦编译器找到了一个满足 import 语句指定的包,就会停止进一步查找。编译器首先会查找 Go 的安装目录,再依次查找 GOPATH 变量列出的目录。

如果没有找到需要的包,那么试图对程序进行 runbuild 时,编译器会报错。后面可通过 go get 命令来修正这种错误。

3.2.1 远程导入

import "github.com/spf13/viper"

用导入路径编译程序时,go build 命令会使用 GOPATH 的设置,在磁盘上搜索这个包。如果路径包含 URL,可以使用 Go 工具链从 DVCS 获取包,并把包的源代码保存在 GOPATH 指向的路径里与 URL 匹配的目录里,这个过程使用 go get 命令完成。

go get 将获取任意指定的 URL 的包,或者一个已经导入的包所依赖的其他包。由于 go get 这种递归特性,这个命令会扫描某个包的源码树,获取所有能找到的依赖包。

3.2.2 命名导入

命名导入是解决包名冲突的有效方法,同时也可简化包名。

Go 语言导入包有以下几种方式:

  • // 使用 test.Test()import "test/test"
  • // 使用 mongo.Test()import mongo "mongo/db"
  • // 对包的调用省略包名,可以直接调用包中的方法或变量import . "test/test"
  • // 当需要导入一个包,但是不需要引用这个包的标识符,使用空白标识符来替代import _ "test/test"

3.3 函数 init

每个包可以包含任意多个 init 函数,这些函数都会在程序执行开始的时候被调用。所有被编译器发现的 init 函数都会被安排在 main 函数之前执行。

init 函数在设置包、初始化变量或者其他要在程序运行之前优先完成的引导工作。

package mainimport (    "fmt"    "os"    "./test")func init()  {    fmt.Println("run before main")}func main() {    fmt.Println(os.Getenv("GOPATH"))    fmt.Println(test.Test())}

3.4 使用 Go 工具

go build:编译程序,生成可执行文件。

  • go build hello.go:指定 Go 文件
  • go build:使用当前目录来编译
  • go build test/...:编译 test 目录下的所有包

go clean:清除编译生成的可执行文件。

go run hello.go:编译完后需要生成运行可执行文件,使用 go run 命令可以将 go build 和运行这两步合二为一。

3.5 进一步介绍 Go 开发工具

3.5.1 go vet

go vet main.go 命令会帮开发人员检测代码的常见错误

  • Printf 类函数调用时,类型匹配错误的参数
  • 定义常用的方法时,方法签名的错误
  • 错误的结构标签
  • 没有指定字段名的结构字面量

3.5.2 Go 代码格式化

go fmt main.go 用来格式化代码,可以用来在保存文件或提交代码库前执行 go fmt

3.5.3 Go 语言文档

go doc tar:命令行查看 tar 包文档

godoc -http:=6060:在线查看文档

3.7 依赖管理

gb 是一个由 Go 社区成员开发的全新构建工具,初步理解与 composer 类似