1. 关于go build
和go install
命令
① go build
命令
- 使用
etcd/raft
时,想运行别人的example试试,官网也给了命令:
$ cd ~/GOPATH/src/go.etcd.io/etcd/v3/contrib/raftexample #切换到
$ go build -o raftexample
- 照着官方的一步步来,下一步就可以使用
raftexample
实现节点的添加了。结果,提示找不到raftexample
命令。
$ raftexample
raftexample:未找到命令
- 通过go help查看
go build
命令,其中明确说了不会进行install,但是自己当时没注意到? ?
$ go help build
usage: go build [-o output] [-i] [build flags] [packages]
Build compiles the packages named by the import paths,
along with their dependencies, but it does not install the results.
- 这里使用了
-o
选项指定了输出,该选项只能在编译一个package时使用。 go build -o raftexample
表示将raftexample
这个package进行整体编译,输出是名为raftexample
的可执行文件,在当前目录输出。
- 解决办法一: 要想在当前目录使用该命令,官网给出的命令有问题:使用的是非
~/GOPATH/bin/
下的可执行文件,应该带上其路径。
$ ./raftexample --id 1 --cluster http://127.0.0.1:12379 --port 12380 # 相对路径
$ ~/GOPATH/src/go.etcd.io/etcd/v3/contrib/raftexample/raftexample \
> --id 1 --cluster http://127.0.0.1:12379 --port 12380 # 绝对路径
- 解决办法二: 在
go build
命令的-o
参数中指定可执行文件的输出路径为~/GOPATH/bin/
,可以发现在对应的目录下有名为raftexample
的可执行文件生成。在任何路径下,使用raftexample
命令,都能生效。
$ go build -o /home/hadoop/GOPATH/bin/raftexample
- 生成的可执行文件,如图所示:
- 运行官网命令,没有问题!
$ raftexample --id 1 --cluster http://127.0.0.1:12379 --port 12380
- 解决方法三: 将
go build -o raftexample
命令生成的可执行文件拷贝到~/GOPATH/bin/
目录。
② go install
命令
- 联想到partener写过脚本,实现了项目的编译,然后直接就可以在bin目录下生成对应的可执行文件。
- 查看partener写的脚本,发现他使用的是
go install
命令。 go install
命令给你的help信息如下:
$ go help install
usage: go install [-i] [build flags] [packages]
Install compiles and installs the packages named by the import paths.
- 根据help信息可知,
go install
命令可以编译并安装Package,所谓的安装就是指在bin目录下生成可执行文件。 - 直接使用
go install
命令:
$ go install ~/GOPATH/src/go.etcd.io/etcd/v3/contrib/raftexample