内容简介:对于刚开始学Go的同学,可能会对几个概念比较迷糊:这个比较好理解,GOROOT表示的是go语言编译、工具、标准库等的安装路径(比如:(画重点)可自定义路径的工作空间-workspace,Go1.7之前必须设置这个变量,且不能够与Go的安装目录相同。1.8之后,GOPATH有默认值--
对于刚开始学 Go 的同学,可能会对几个概念比较迷糊: GOROOT 和 GOPATH ,今天就来聊聊它们。 执行 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 目录。
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 main
import (
"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来了」,获取最新文章!
以上所述就是小编给大家介绍的《聊聊Go工作空间》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
算法分析-有效的学习方法(影印版)
Jeffrey J.McConnell / 高等教育出版社 / 2003-03-01 / 28.0
本书主要目标是提高读者关于算法对程序效率的影响等问题的认知水平,并培养读者分析程序中的算法所必需的技巧。各章材料以激发读者有效的、协同的学习方法的形式讲述。通过全面的论述和完整的数学推导,本书帮助读者最大限度地理解基本概念。 本书内容包括促使学生参与其中的大量程序设计课题。书中所有算法以伪码形式给出,使得具备条件表达式、循环与递归方面知识的读者均易于理解。本书以简洁的写作风格向读者介绍了兼具......一起来看看 《算法分析-有效的学习方法(影印版)》 这本书的介绍吧!