目录
本次学习go如果依赖第三方的包,并根据第三方的包提供的接口进行编程,这里需要使用go get命令。下面将go get命令描述如下:
首先将官网的Go 命令文档路径贴一下:
Command go - The Go Programming Language
1. go get 命令
命令用于从远程代码仓库(比如 Github )上下载并安装代码包。注意,go get 命令会把当前的代码包下载到 $GOPATH 中的第一个工作区的 src 目录中,并安装。
go 1.17之后go get只下载源码,并将依赖添加到go.mod,并不会安装。安装油go install完成。
2. go run 命令
专门用来运行命令源码文件的命令,一般用来运行单个文件
3. go build命令
主要是用于测试编译。编译某个包或者项目,在当前目录下生成可执行文件
go build 用于编译导入的包,包括import导入的包,以及这些包所依赖的其他关系包,但是并不会将编译后的结果进行安装。
go build 所在包为main 包时
若go build 后跟好几个.go文件,编译时会认为这几个文件是在同一个包中,且已第一个.go 文件名为输出结果.(比如:go build ed.go rx.go 输出为ed 或 ed.exe)
如果go build 后跟一个目录比如:go build /unix/sam 编译结果输出为: sam或sam.exe
go build 多个包或非main 包时,会丢弃编译结果,只检查是否可以执行编译
go build 编译包时,会忽略“_test.go”结尾的文件(即测试文件)
如果go build 后不跟任何参数则会编译当前目录所对应的代码包,生成目录名或目录名.exe 可执行文件
go build -o : 比如再main包目录(project)下,go build -o project2.exe ,则生成的结果不是project.exe 而是 project2.exe 就是说生成的可执行文件将会写入到你指定的文件名中
go build -i:默认不写 -i 情况下,编译后的.a 文件是不会保存也不会安装到 pkg 目录下的windows_amd64 目录中,但是只要加上 -i 编译后的.a 文件就会自动保存到pkg 目录中,就是说:标记 -i 会使 go build 命令安装那些编译目标依赖的且还未被安装的代码包。
4. go install 命令
编译并安装代码包或者源码文件,安装为可执行的二进制文件。
以上命令参考文章,包括其他命令:go fmt , go version ,go info, go clean , go test, go doc , go env, go list, go fix等
go run、build、install、get的原理和区别 - 知乎
一、导入第三方包
以concurrent_map为例,github地址https://github.com/orcaman/concurrent-map/blob/v2.0.1/concurrent_map.go
需要将concurrent_map包引入工程,需要在我们的项目目录下,也就是go.mod同级目录下
1.执行命令
go get -u "github.com/orcaman/concurrent-map" #-u参数表示最新的版本
执行结果分两种情况
1.1.执行成功提示
# go get -u "github.com/orcaman/concurrent-map"
go: downloading github.com/orcaman/concurrent-map v1.0.0
go: added github.com/orcaman/concurrent-map v1.0.0
1.2. 执行失败提示
go: github.com/orcaman/[email protected]: reading
https://mirrors.aliyun.com/goproxy/github.com/orcaman/concurrent-map/@v/v2.0.1.info: 404 Not Found
或者报错,提示timeout
这种情况下是因为环境变了GOPROXY参数配置的代理地址不可访问,需要修改GOPROXY,使用国内
export GOPROXY=https://goproxy.cn
或者
export GOPROXY=https://mirrors.aliyun.com/goproxy/
建议将以上参数添加到操作系统环境变量中。
2.查看go环境变量参数
go env
然后继续执行命令,发现成功即可。
# go get -u "github.com/orcaman/concurrent-map"
go: downloading github.com/orcaman/concurrent-map v1.0.0
go: added github.com/orcaman/concurrent-map v1.0.0
3.查看go.mod文件的变化情况
module golearning
go 1.20
require github.com/orcaman/concurrent-map v1.0.0 // indirect
从中看到多了一行依赖配置
二、程序里如何import
还是继续以concurrent_map为例,执行为go get 命令后已经下载并更新依赖,程序里需要通过import引入
1. import依赖包
import (
cmap "github.com/orcaman/concurrent-map"
"testing"
)
cmap是包的别名,由于包名太长,程序通过cmap访问接口方便快捷。
2. 程序编写
func TestRemotePckageInvoke(t *testing.T) {
userMapping := cmap.New()
userMapping.Get("KeyName")
}
参考资料