夜雪天狼
学习笔记
技术博文
转载备份
心灵鸡汤
目录
go环境配置
发布者:caijw
阅读量:62362
发布时间:2018-09-23 09:00:00
# Go语言概述 Go是一种新的语言,一种并发的、带垃圾回收的、快速编译的语言,它具有以下特点: * 它可以在一台计算机上用几秒钟的时间编译一个大型的Go程序 * Go为软件构造提供了一种模型,它使依赖分析更加容易,且避免了大部分C风格include文件与库的开头 * Go是静态类型的语言,它的类型系统没有层级。因此用户不需要在定义类型之间的关系上花费时间,这样感觉起来比典型的面向对象语言更轻量级 * Go完全是垃圾回收型的语言,并为并发执行与通信提供了基本的支持 * 按照其设计,Go打算为多核机器上系统软件的构造提供一种方法 -vertical- Go是一种编译型语言,它结合了解释型语言的游刃有余,动态类型语言的开发效率,以及静态类型的安全性 它也打算成为现代的,支持网络与多核计算的语言 要满足这些目标,需要解决一些语言上的问题:一个富有表达能力但轻量级的类型系统,并发与垃圾回收机制,严格的依赖规范等等 这些无法通过库或工具解决好,因此Go也就应运而生了 本文将讲述如何配置Go的项目信息 -separator- # GOPATH与工作空间 在安装Go的时候需要设置GOPATH变量(本文并没有介绍如何安装Go),Go从1.1版本开始必须设置这个变量,而且不能和Go的安装目录一样,这个目录用来存放Go源码,Go的可运行文件,以及相应的编译之后的包文件 所以这个目录下面有三个子目录:src、bin、pkg -vertical- ## GOPATH设置 go 命令依赖一个重要的环境变量:$GOPATH(Windows系统中环境变量的形式为%GOPATH%,本书主要使用Unix形式,Windows用户请自行替换) 在类似 Unix 环境大概这样设置: ```shell export GOPATH=/home/apple/my_go ``` 为了方便,应该把新建以上文件夹,并且把以上一行加入到 .bashrc 或者 .zshrc 或者自己的 sh 的配置文件中 GOPATH允许多个目录,当有多个目录时,请注意分隔符,多个目录的时候Windows是分号,Linux系统是冒号,当有多个GOPATH时,默认会将go get的内容放在第一个目录下 以上 $GOPATH 目录约定有三个子目录: * src 存放源代码(比如:.go .c .h .s等) * pkg 编译后生成的文件(比如:.a) * bin 编译后生成的可执行文件(为了方便,可以把此目录加入到 $PATH 变量中,如果有多个gopath,那么使用${GOPATH//://bin:}/bin添加所有的bin目录) -vertical- ## 获取远程包 go语言有一个获取远程包的工具就是go get,目前go get支持多数开源社区(例如:github、googlecode、bitbucket、Launchpad) ```shell go get github.com/astaxie/beedb ``` 通过这个命令可以获取相应的源码,对应的开源平台采用不同的源码控制工具,例如github采用git、googlecode采用hg,所以要想获取这些源码,必须先安装相应的源码控制工具 Comment: go get -u 参数可以自动更新包,而且当go get的时候会自动获取该包依赖的其他第三方包 -separator- # Go 命令 Go语言自带有一套完整的命令操作工具,你可以通过在命令行中执行go来查看它们 -vertical- ## go build 这个命令主要用于编译代码。在包的编译过程中,若有必要,会同时编译与之相关联的包 * 如果是普通包,当你执行go build之后,它不会产生任何文件。如果你需要在$GOPATH/pkg下生成相应的文件,那就得执行go install * 如果是main包,当你执行go build之后,它就会在当前目录下生成一个可执行文件。如果你需要在$GOPATH/bin下生成相应的文件,需要执行go install,或者使用go build -o 路径/a.exe。 * 如果某个项目文件夹下有多个文件,而你只想编译某个文件,就可在go build之后加上文件名,例如go build a.go; go build命令默认会编译当前目录下的所有go文件 * 你也可以指定编译输出的文件名,我们可以指定go build -o a.exe,默认情况是你的package名(非main包),或者是第一个源文件的文件名(main包) 注:实际上,package名在Go语言规范中指代码中"package"后使用的名称,此名称可以与文件夹名不同。默认生成的可执行文件名是文件夹名 * go build会忽略目录下以“_”或“.”开头的go文件 详细介绍可以通过`go help build`查看 -vertical- ## go get 这个命令是用来动态获取远程代码包的,目前支持的有BitBucket、GitHub、Google Code和Launchpad。这个命令在内部实际上分成了两步操作:第一步是下载源码包,第二步是执行go install。下载源码包的go工具会自动根据不同的域名调用不同的源码工具,对应关系如下: * BitBucket (Mercurial Git) * GitHub (Git) * Google Code Project Hosting (Git, Mercurial, Subversion) * Launchpad (Bazaar) 所以为了go get 能正常工作,你必须确保安装了合适的源码管理工具,并同时把这些命令加入你的PATH中。其实go get支持自定义域名的功能,具体参见go help remote 参数介绍: * -d 只下载不安装 * -f 只有在你包含了-u参数的时候才有效,不让-u去验证import中的每一个都已经获取了,这对于本地fork的包特别有用 * -fix 在获取源码之后先运行fix,然后再去做其他的事情 * -t 同时也下载需要为运行测试所需要的包 * -u 强制使用网络去更新包和它的依赖包 * -v 显示执行的命令 -vertical- ## go install 这个命令在内部实际上分成了两步操作:第一步是生成结果文件(可执行文件或者.a包),第二步会把编译好的结果移到$GOPATH/pkg或者$GOPATH/bin 参数支持go build的编译参数。大家只要记住一个参数-v就好了,这个随时随地的可以查看底层的执行信息 -vertical- ## 其它命令 go还提供了其它很多的工具,例如下面的这些工具 * go version 查看go当前的版本 * go env 查看当前go的环境变量 * go list 列出当前全部安装的package * go run 编译并运行Go程序 * go test * 。。。 -separator-