3

【基础】使用Goinstall工具

 2 years ago
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.
neoserver,ios ssh client

go 工具为公共代码仓库中维护的开源代码而设计。

无论是否公布代码,该模型设置工作环境的方法都是相同的。

Go代码必须放在工作空间内,其实就是一个目录,其中包含三个子目录:

src 目录包含Go的源文件,它们被组织成包(每个目录都对应一个包)

pkg 目录包含包对象

bin 目录包含可执行程序

go 工具用于构建源码包,并将其生成的二进制文件安装到 pkgbin 目录中。

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 相同


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK