博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
聊聊Go工作空间
阅读量:5963 次
发布时间:2019-06-19

本文共 2363 字,大约阅读时间需要 7 分钟。

前言

对于刚开始学Go的同学,可能会对几个概念比较迷糊:GOROOTGOPATH,今天就来聊聊它们。 执行go env,给大家看下我开发环境的相关参数配置(部分):

GOARCH="amd64"GOBIN="/Users/chengguilu/goProjects/bin"GOCACHE="/Users/chengguilu/Library/Caches/go-build"GOHOSTARCH="amd64"GOHOSTOS="darwin"GOOS="darwin"GOPATH="/Users/chengguilu/goProjects"GOROOT="/usr/local/go"GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"GCCGO="gccgo"CC="clang"CXX="clang++"复制代码

GOROOT

这个比较好理解,GOROOT表示的是go语言编译、工具、标准库等的安装路径(比如:/usr/local/go),简而言之,就是安装路径,GO安装好之后就有了。

GOPATH

(画重点) 可自定义路径的工作空间-workspace,Go1.7之前必须设置这个变量,且不能够与Go的安装目录相同。1.8之后,GOPATH有默认值--$HOME/go。可以执行go env GOPATH查看,从上面可以看到,我的GOPATH是/Users/chengguilu/goProjects。其实,说白了,GOPATH对应计算机的一个目录。 作用:用来存放Go代码,Go的可运行文件,以及相应的编译之后的包文件。 Go代码必须放在工作空间内,workspace目录包含三个子目录

  • src 存放Go源代码,它们被组织成包(每个目录都对应一个包)
  • pkg 存放编译后生成的文件,比如:.a文件(静态库文件)
  • bin 存放编译后的可执行文件

我们可以通过go工具构建源码包,并将其生成的二进制文件安装到 pkg 和 bin 目录中。 我们实际操练下,上一节的Hello World入门程序就按照这种方式存放。在workspace创建相关目录src、pkg和bin,将写好的hello.go保存在GOPATH/src/hello目录。

现在,我们就可以 go 工具构建并安装
hello.go

go install hello/复制代码

我们可以在系统的任一目录中执行此命令,go 工具会根据指定的GOPATH,在 hello/ 包内查找源码(下一节给大家讲包的概念,现在大家了解概念就可以,不必深究)。若在包路径下执行go install,可以省略包路径。 go install命令产生可执行的二进制文件,接着它会将该二进制文件安装到工作空间的 bin 目录中,例子中为 $GOPATH/bin/hello

通过命令行
$GOPATH/bin/hello来运行(
$GOPATH请自行替换)
还有一种更简便的方法,直接执行可执行文件,不过这需要将
$GOPATH/bin 添加到 PATH 中。

你的第一个库

编写一个库,并让hello程序来调用它。 在$GOPATH/src下创建包目录github.com/Seekload/stringutil

之后,在该目录中创建的文件
reverse.go并保存(文件看不懂没关系,随着学习深入,相关知识点都会讲到,这里只做演示使用):

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 github.com/Seekload/stringutil复制代码

也可以在包目录下直接执行go build。 这个命令不会产生输出文件。想要输出的话,必须使用 go install 命令,它会将编译之后的静态文件放到工作空间的 pkg 目录中。

确认
stringutil包构建完毕后,修改原来的 hello.go 文件并使用它:

package mainimport (	"fmt"	"github.com/Seekload/stringutil")func main() {	fmt.Println(stringutil.Reverse("!oG ,daolkeeS"))}复制代码

执行go install hello/,重新编译hello.go,生成可执行文件hello并执行:

hello.go中,我们引入了
github.com/Seekload/stringutil 包,所以重新执行
go intall hello/时,
stringutil 包会被自动安装。 注意:
go install github.com/Seekload/stringutil 是将
stringutil.a 放到
pkg/darwin_amd64 目录中,反映出其源码目录。
darwin_amd64 这部分能帮助跨平台编译,并反映出你的操作系统和架构。

这一节涉及了包的概念,有些同学可能还不太清楚。别急,将在下节给大家讲解Go语言中的包。

(全文完)

原创文章,若需转载请注明出处!

欢迎扫码关注公众号「Golang来了」或者移步 ,查看更多精彩文章。

关注公众号「Golang来了」,获取最新文章!

你可能感兴趣的文章
数据库字段加1
查看>>
GNOME是最好的!
查看>>
Nginx 的软件负载均衡详解
查看>>
往事两三则
查看>>
使用LiveData和DataBinding进行双向绑定
查看>>
Convert Url to InetAddress
查看>>
oracle 限制特定ip登录
查看>>
解酒方法
查看>>
vi 命令
查看>>
1.1
查看>>
[logstash-input-redis]插件使用详解
查看>>
优化应用的电池寿命(笔记)-1
查看>>
SSH Secure Shell Client
查看>>
JFinal源码分析------初始化那些事儿
查看>>
处理 允许远程协助连接这台计算机 灰色
查看>>
使用Jquery 加载页面时调用JS
查看>>
css+div+jquery弹出层
查看>>
求职相关(链接,不定期更新)
查看>>
pdo 连接数据库 报错 could not find driver 解决方法
查看>>
设计模式之策略模式
查看>>