Golang包和工具
包的导入路径
import ( "encoding/json" "fmt" "math/rand" "golang.org/x/net/html" "github.com/go-sql-driver/MysqL" )
Go语言的规范并没有指明包的导入路径字符串的具体含义,导入路径的具体含义是由构建工具来解释的。 **如果你计划分享或发布包,那么导入路径最好是全球唯一的。为了避免冲突,所有非标准库包的导入路径建议以所在组织的互联网域名为前缀;而且这样也有利于包的检索。**例如,上面的import语句导入了Go团队维护的HTML解析器和一个流行的第三方维护的MysqL驱动。
包声明
在每个Go语音源文件的开头都必须有包声明语句。包声明语句的主要目的是确定当前包被其它包导入时默认的标识符(也称为包名)。
例如,math/rand包的每个源文件的开头都包含package rand包声明语句,所以当你导入这个包,你就可以用rand.Int、rand.Float64类似的方式访问包的成员。
关于默认包名一般采用导入路径名的最后一段的约定也有三种例外情况。第一个例外,包对应一个可执行程序,也就是main包,这时候main包本身的导入路径是无关紧要的。名字为main的包是给go build构建命令一个信息,这个包编译完之后必须调用连接器生成一个可执行程序。
第二个例外,包所在的目录中可能有一些文件名是以test.go为后缀的Go源文件(译注:前面必须有其它的字符,因为以``前缀的源文件是被忽略的),并且这些源文件声明的包名也是以_test为后缀名的。这种目录可以包含两种包:一种普通包,加一种则是测试的外部扩展包。所有以_test为后缀包名的测试外部扩展包都由go test命令独立编译,普通包和测试的外部扩展包是相互独立的。
第三个例外,一些依赖版本号的管理工具会在导入路径后追加版本号信息,例如"gopkg.in/yaml.v2"。这种情况下包的名字并不包含版本号后缀,而是yaml。
包的导入声明
可以在一个Go语言源文件包声明语句之后,其它非导入声明语句之前,包含零到多个导入包声明语句。每个导入声明可以单独指定一个导入路径,也可以通过圆括号同时导入多个导入路径。下面两个导入形式是等价的,但是第二种形式更为常见。 import "fmt" import "os" import ( "fmt" "os" )
如果我们想同时导入两个有着名字相同的包,例如math/rand包和crypto/rand包,那么导入声明必须至少为一个同名包指定一个新的包名以避免冲突。这叫做导入包的重命名。
import ( "crypto/rand" mrand "math/rand" // alternative name mrand avoids conflict )
包的匿名导入
如果只是导入一个包而并不使用导入的包将会导致一个编译错误。但是有时候我们只是想利用导入包而产生的副作用:它会计算包级变量的初始化表达式和执行导入包的init初始化函数。这时候我们需要抑制“unused import”编译错误,我们可以用下划线_来重命名导入的包。像往常一样,下划线_为空白标识符,并不能被访问。
import _ "image/png" // register PNG decoder
Go工具
以下列出了最常用的命令:
$ go ... build compile packages and dependencies clean remove object files doc show documentation for package or symbol env print Go environment information fmt run gofmt on package sources get download and install packages and dependencies install compile and install packages and dependencies list list packages run compile and run Go program test test packages version print Go version vet run go tool vet on packages
使用go env打印Go开发环境的变量,其中GOPATH:
GOPATH="/Users/xinxingegeya/mygo:/Users/xinxingegeya/workspace-go"
GOPATH 包含了两个目录,前一个目录保存下载的包,后一个目录是工作空间,存放源代码。
工作空间的目录结构如下,
➜ workspace-go tree -L 5 . ├── bin │ ├── test │ └── tmp └── src ├── dingding.com └── usoft.com └── goexercise ├── assert │ └── main.go ├── balance │ └── main.go ├── chan │ └── main.go ├── channel │ └── main.go ........
============END============
原文链接:https://www.f2er.com/go/189500.html