概述
引言
Go自带100多个包,可以为大多数应用程序提供基础。Go社区是一个茁壮成长的生态环境,其中鼓励包设计、共享、重用以及改进,已经发布的很多包,可以在https://godoc.org
找到。
包管理系统的目的是为了对关联的特性进行分类,组织成便于理解和修改的单元,使其与程序的其它包保持独立,从而有助于设计和维护大型程序。
Go的包管理类似于Java的依赖管理,比如常用的:maven,不同的是,Go的包管理不需要指定GAV坐标,而是需要调用者主动下载包文件。
包通过控制名字是否导出使其对包外可见来提供封装能力,限制包成员的可见性,从而隐藏API后面的辅助函数和类型,允许包的维护者修改包的实现而不影响包外部的代码。限制变量的可见性也可以隐藏变量,这样使用者仅可以通过导出函数来对其访问和更新,它们可以保留自己的不变量以及在并发程序中实现互斥访问。
导入路径
每一个包都通过一个唯一的的字符串进行标识,它称为导入路径。如下:
import "fmt"
包的声明
在每一个Go源文件的开头都需要进行包生明,它的主要目的是当该包被其他包引入的时候作为其默认的标识符。
例如,math/rand
包中每一个文件的开头都是package rand
,这样当你导入这个包时,可以访问它的成员,比如:rand.Int、rand.Float64
等。
package main
import(
"fmt"
"math/rand"
)
func main(){
fmt.Println(rand.Int())
}
导入声明
import "fmt"
import "os"
等价于
import {
"fmt"
"os"
}
空导入
如果导入的包的名字没有在文件中引用,就会引起一个编译错误。但是有时候,我们必须导入一个包,这仅仅是为了利用其副作用:对包级别的变量执行初始化表达式求值,并执行它的init
函数。为了防止:“未使用的导入”错误,我们必须使用一个重命名导入,它使用一个替代的名字_
,这表示导入的内容为空白标识符。通常情况下,空白标识符不可能被引用。
import _ "image/png" // 注册PNG解码器
这称为空白导入,多数情况下,它用来实现一个编译时的机制,使用空白引用导入额外的包,来开启主程序可选的特性。
包及其命名
包名应该尽可能简短,并且保持可读性和无歧义。例如,不要把一个辅助工具包命名为util
,使用imageutil
或者ioutil
则更为合适。
包名通常使用统一的形式,标准包bytes
、errors
、strings
使用复数来避免覆盖响应的预声明类型,使用go/types
这个形式,来避免和关键字的冲突。
Go工具
Go工具将不同种类的的工具合并为一个命名集,它是一个包管理器(类似于apt或者rpm),它可以查询包的作者,计算其依赖关系,从远程版本控制系统下载它们。它是一个构建系统,可计算文件依赖、调用编译器、汇编器、链接器,尽管他没有标准的UNIXmake
命令完备。
以下列出了常用的命令:
The commands are:
bug start a bug report
build compile packages and dependencies
clean remove object files and cached files
doc show documentation for package or symbol
env print Go environment information
fix update packages to use new APIs
fmt gofmt (reformat) package sources
generate generate Go files by processing source
get add dependencies to current module and install them
install compile and install packages and dependencies
list list packages or modules
mod module maintenance
run compile and run Go program
test test packages
tool run specified go tool
version print Go version
vet report likely mistakes in packages
工作空间的组织
大部分用户必须进行的唯一配置是:GOPATH
环境变量,它指定工作空间的根目录。
GOPATH
下有三个子目录:
-
src
子目录包含源文件,每一个包放在一个目录中,该目录相对于$GOPATH/src
的名字是包的导入路径。 -
pkg
子目录是构建工具存储编译后的包的位置。 -
bin
目录是存放可执行程序的目录。
go env
命令输出与工具链相关的已经设置有效值的环境变量及其所设置的值,还会输出未设置有效值的环境变量及其默认值。如下所示:
包的下载
如果使用go
工具,包的导入路径不仅指示了如何在本地空间中找到他的位置,还指明了通过互联网使用go get
来获取和更新它的位置。
go get
命令可以下载单一的包,也可以使用...符号来下载子树或仓库。
go get
命令已经支持多个流行的代码托管站点,如GitHub
、BitBucket
、launchpad
,并且可以向版本控制系统发出合适的请求。
包的构建
go build
命令编译每一个命令行参数中的包。如果包的名字是main
,go build
调用链接器在当前目录中创建可执行程序,可执行程序的名字取自包的导入路径的最后一段。
包可以通过指定目录来指定,可以使用导入路径或者一个相对目录名,目录必须以.
或..
开头。
如下所示:
cd anywhere
go build gopl.io/njn/jbnj
以上就是关于包的相关内容。
希望可以帮助到你~
最后
以上就是欣慰音响为你收集整理的Go语言之包和go工具的全部内容,希望文章能够帮你解决Go语言之包和go工具所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复