【基础】使用Goinstall工具
source link: https://wintrysec.github.io/2021/09/26/%E3%80%905%E3%80%91%E5%AE%89%E5%85%A8%E5%BC%80%E5%8F%91/Golang/%E3%80%90%E5%9F%BA%E7%A1%80%E3%80%91%E4%BD%BF%E7%94%A8Goinstall%E5%B7%A5%E5%85%B7/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
go
工具为公共代码仓库中维护的开源代码而设计。
无论是否公布代码,该模型设置工作环境的方法都是相同的。
Go代码必须放在工作空间内,其实就是一个目录,其中包含三个子目录:
✅src
目录包含Go的源文件,它们被组织成包(每个目录都对应一个包)
✅pkg
目录包含包对象
✅bin
目录包含可执行程序
go
工具用于构建源码包,并将其生成的二进制文件安装到 pkg
和 bin
目录中。
GOPATH 环境变量
GOPATH 环境变量指定了工作空间位置。它或许是在开发Go代码时, 唯一需要设置的环境变量。
首先创建一个工作空间目录,并设置相应的 GOPATH
。
工作空间可以放在任何地方, 但是它绝对不能和Go安装目录相同。
$ mkdir $HOME/work
$ export GOPATH=$HOME/work
作为约定,请将此工作空间的 bin
子目录添加到你的 PATH
中:
export PATH=$PATH:$GOPATH/bin
标准库中的包有给定的短路径,比如 "fmt"
和 "net/http"
。
自己的包必须选择一个基本路径,保证不和标准库和其它第三方库冲突。
用 github.com/user
作为基本路径。在工作空间里创建一个目录, 将源码存放到其中:
$ mkdir -p $GOPATH/src/github.com/wintrysec
第一个程序
要编译并运行简单的程序,首先要选择包路径,并在工作空间内创建相应的包目录:
$ mkdir $GOPATH/src/github.com/wintrysec/hello
接着,在该目录中创建名为 hello.go
的文件:
package main
import "fmt"
func main() {
fmt.Printf("Hello, world.\n")
}
现在可以用 go
工具构建并安装此程序了:
$ go install github.com/user/hello
注意,你可以在系统的任何地方运行此命令。
go
工具会根据 GOPATH
指定的工作空间,在 github.com/user/hello
包内查找源码。
若在包目录中运行 go install
,也可以省略包路径:
$ cd $GOPATH/src/github.com/user/hello
$ go install
此命令会构建 hello
命令,产生一个可执行的二进制文件。
接着它会将该二进制文件作为 hello
(在 Windows 下则为 hello.exe
)安装到工作空间的 bin
目录中。
输入该二进制文件名即可运行:
$ hello
Hello, world.
第一个自定义库
编写一个库,并让 hello
程序来使用它。
选择包路径( github.com/user/stringutil
) 并创建包目录
$ mkdir $GOPATH/src/github.com/user/stringutil
接着,在该目录中创建名为 reverse.go
的文件,内容如下:
// stringutil 包含有用于处理字符串的工具函数。
package stringutil
// Reverse 将其实参字符串以符文为单位左右反转。
func Reverse(s string) string {
r := []rune(s)
for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {
r[i], r[j] = r[j], r[i]
}
return string(r)
}
可以使用go build进行测试:
$ go build
这不会产生输出文件,想要输出必须使用 go install
命令构建包
它会将包的对象放到工作空间的 pkg
目录中。
修改原来的 hello.go
文件:
package main
import (
"fmt"
"github.com/user/stringutil"
)
func main() {
fmt.Printf(stringutil.Reverse("!oG ,olleH"))
}
然后重新构建它
go install
hello.exe
无论是安装包还是二进制文件,go
工具都会安装它所依赖的任何东西。 因此当我们通过
$ go install github.com/user/hello
来安装 hello
程序时,stringutil
包也会被自动安装。
若在包的导入路径中包含了代码仓库的URL,go get
就会自动地获取、 构建并安装它
$ go get github.com/golang/example/hello
#网络原因可以挂全局代理解决
若指定的包不在工作空间中,go get
就会将会将它放到 GOPATH
指定的第一个工作空间内。
若该包已存在,go get
就会跳过远程获取, 其行为与 go install
相同
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK