7.1. 包管理

Go语言的源码复用建立在包(package)基础之上。 Go语言的入口main()函数所在的包(package)叫main,main包想要引用别的代码,必须同样以包的方式进行引用。

Go语言的包与文件夹一一对应,所有与包相关的操作,必须依赖于工作目录(GOPATH)。

7.1.1. 1.工作目录(GOPATH)

1.1 使用命令行查看GOPATH信息

$ go env

1.2 使用GOPATH的工程结构

在GOPATH指定的工作目录下,代码总是会保存在\(GOPATH/src目录下。 在工程经过go build、go install或go get等指令后,会将产生的二进制可执行文件放在\)GOPATH/bin目录下, 生成的中间缓存文件会被保存在$GOPATH/pkg下。

如果需要将整个源码添加到版本管理工具(Version Control System,VCS)中时,只需要添加$GOPATH/src目录的源码即可。 bin和pkg目录的内容都可以由src目录生成。

建议在开发时只填写项目GOPATH,每一个项目尽量只设置一个GOPATH,不使用多个GOPATH和全局的GOPATH。

Go语言中的GOPATH也是一种类似全局包含的设计,因此鉴于Visual Studio在设计上的失误,建议开发者不要设置全局的GOPATH,而是随项目设置GOPATH。

7.1.2. 2.包的导入

在Go语言中,函数或者对象及其方法的调用需要先把所依赖的库导入。

虽然官方支持多种导入方式,但是为了便于理解,

建议使用默认的导入方式,即全路径的导入方式,主要原因如下:

(1)便于知道函数或者类型来自哪个库。

(2)防止冲突,函数或者类型命名冲突的情况非常容易发生。

默认导入方式:全路径导入,fmt在$GOROOT/src目录下。

package main

import (
    "errors"
    "fmt"
    "log"
)

func main() {
    fmt.Println("Hello World")
    fmt.Print(errors.New(""))
    log.Println()
}

7.1.3. 3.下载包

使用go命令来下载包:

go get -u -v github.com/PuerkitoBio/goquery

【说明】

u:表示更新,比如远程代码更新,本地库还是旧版的。

v:显示下载库的文件详细信息。

因为Go语言是谷歌公司出品的,有些库托管在谷歌服务器上,所以有时下载库会连接不上,这时推荐设置代理的方式,具体的设置可参照官方网站(https://goproxy.cn/),以便提升下载速度。

3.1 Gitee Go Proxy仓使用帮助

1.代理上游

https://goproxy.cn/

https://goproxy.io/

2.使用方法

#Go 1.13 及以上
go env -w GO111MODULE=on
go env -w GOPROXY=http://mirrors.gitee.com/repository/go-public/
go env -w GOSUMDB=off

#or
export GOPROXY=http://mirrors.gitee.com/repository/go-public/

测试

#test
go get github.com/valyala/fasthttp