学习一种编程语言,除了基本的语法,更重要的是要了解如何在实际的工程中使用它。本文中,我会和大家一起,从零开始,安装go语言,配置环境,安装ide,开发一个hello world程序。这个hello world版我会编写两个版本:gopath和go module版本。
q:
本教程为什么会编写两个版本?
a:
网上大部分go语言hello world都只简单地介绍了gopath版本。但是从go的1.11版本之后,已不再推荐使用gopath来构建应用了。也就是说gopath被认为是废弃的,错误的做法。
正确的做法是使用go module。所以,有必要在教程中将这个信息告诉初学者,引导大家使用推荐的最佳实践方式go module。
或许这也是本hello world教程和网上大部分教程的区别吧。会从开发者的实际使用出发。介绍go语言的发展历史和最佳实践。
安装go
使用go语言开发,第一步肯定是安装go啦。
第一步:进入go语言的官网https://golang.org。点击“download go”。是的,就是那个傻傻的土拨鼠^_^
第二步:根据操作系统下载对应的软件包进行安装。
golang对主流的操作系统都有支持,比如windows,macos和linux等。
本系列教程中,我会使用macos操作系统,所以选择下载“apple macos”。大家要根据自己的操作系统进行下载。
第三步:安装go。
在macos下安装go很简单,就是标准的dmg文件安装,直接“下一步”就可以了。
第四步:确认go是否安装成功。
运行命令“go version”,会输出类似于“go version go1.12.9 darwin/amd64”的内容。请确保包没有任何错误发生。
配置环境
和其他开发语言类似,安装了go之后,还需要对开发环境进行相应的配置。比如在java中,需要配置java_home,maven等。
go开发相关的环境变量如下:
● goroot:goroot就是go的安装目录。
● gopath:gopath保存go项目代码。
goroot
goroot是go的安装路径。mac中安装go会自动配置好goroot,路径为/usr/local/go。goroot在绝大多数情况下都不需要修改。以下是goroot目录的内容(已省略了一些无关信息):
tree -l 2 /usr/local/go./├── bin│ ├── go│ └── gofmt├── doc│ ├── articles│ └── docs.html├── src│ ├── errors│ ├── fmt│ ├── log│ └── os
可以看到goroot下有bin,doc和src目录。bin目录下有我们熟悉的go和gofmt工具。可以认为gooroot和java里的jdk目录类似。
gopath
gopath是开发时的工作目录。用于:
● 保存编译后的二进制文件。
● go get和go install命令会下载go代码到gopath。
● import包时的搜索路径。
关于gopath需要特别注意。在go的1.11版本之前,gopath是必需的,且所有的go项目代码都要保存在gopath目录下。go的1.11版本之后,go官方引入了go module。使用go module管理的项目可以放在gopath目录外面。
使用gopath时,go会在以下目录中搜索包:
1. goroot/src:该目录保存了go标准库代码。
2. gopath/src:该目录保存了应用自身的代码和第三方依赖的代码。
假设程序中引入了如下的包:
import github.com/tom/hello-go/foo/bar
第一步:go会先去goroot的scr目录中查找,很显然它不是标准库的包,没找到。
第二步:继续在gopath的src目录去找,准确说是gopath/src/github.com/tom/hello-go/foo/bar这个目录。如果该目录不存在,会报错找不到package。在使用gopath管理项目时,需要按照go寻找package的规范来合理地保存和组织go代码。
go的这个“将所有代码都放置在gopath中”的设计,的确是和其他主流语言很不一样。不管go官方是出于什么考虑,这个设计在实际使用中,的确给开发者造成了很大的不便和理解上的困难。甚至直接劝退了很多go的初学者。
万幸的是,go module正式发布了。go module的发布解决了困扰go语言长达十年的代码组织,依赖管理问题。
说明:关于gopath和go module的历史渊源,详细使用,会在另一篇进行说明。本文还是聚焦在hello world入门。
另外,由于某些原因,go的某些托管在google仓库中的代码在国内是无法访问的。如果使用go module,我们可以设置goproxy,让go从goproxy下载go代码,速度更快。国内用户可以设置goproxy为https://goproxy.cn,使用如下命令来设置goproxy:
export goproxy=https://goproxy.cn
关于环境配置,总结下来就是:
● 如果使用go module(推荐的),设置export goproxy=https://goproxy.cn。
● 如果使用gopath(遗留的,被废弃的),需要设置gopath到本地的某个目录。
安装ide
目前比较常用的ide有:
● visual studio code
● goland
visual studio code是微软开发的一款开源的,轻量级的文本编辑器。通过安装go插件,可以用于go语言的开发。goland是jetbrains公司开发的,专业的go语言开发ide。
推荐使用goland。很多人都说visual studio code更轻量级,但作为一款每天都要重度使用的,需要靠它吃饭的工具,我们需要的是功能全面。尤其是当你需要完备的调试,需要强大的ide智能辅助功能时,相信你会选择更专业的goland。
goland的官方主页为https://www.jetbrains.com/go/,点击“download”即可下载
注意
goland使用的是和intellij idea一样的框架,是用java语言开发的。你需要安装java环境才可以运行goland哦。
goland是收费软件,只有30天的试用期。试用期结束后,需要购买授权。当然在天朝,我们都习惯不花钱用软件。大家可以自行百度或google搜索一下。
hello world(gopath版)
第一步:设置gopath
首先设置gopath,假设gopath设置为$home/worspace/go。
第二步:创建子目录
进入$home/workspace/go目录。新建子目录src。然后再src中新建子目录hello。在hello目录,新建一个hello-world.go文件:
目录结构应该如下所示:
$home workspace go src hello hello-world.go
第三步:创建hello-world.go文件:
package mainimport fmtfunc main() { fmt.println(hello world)}
第四步:执行go build
在$home/workspace/go目录执行命令:
go build
会生成一个可执行二进制文件:hello。如果是windows系统,会生成hello.exe文件。
第五步:运行hello文件:
./hellohello world
输出“hello world”。
hello world(go module版)
第一步:创建项目的根目录
任意创建一个目录(可以不在gopath中),假设是$home/tmp/hello。
第二步:初始化go模块
执行命令:
go mod init github.com/vangoleo/hello
该命令会将hello目录初始化为一个go module,并生成一个$home/tmp/hello/go.mod文件。内容如下:
module github.com/vangoleo/hellogo 1.12
第三步:编写hello.go文件
编写文件$home/tmp/hello/hello.go:
package mainimport ( fmt rsc.io/quote)func main() { fmt.println(quote.hello())}
第四步:编辑go.mod文件:
在实际项目中,都会使用到第三方库。可以在go module中添加项目的依赖。本例中,我们会添加一个quote依赖,该依赖会打印当前语言的“hello world”,比如,如果是中文环境,会打印“你好,世界”。
编辑go.mod文件,添加quote依赖:
module github.com/vangoleo/hellogo 1.12require rsc.io/quote v1.5.2
第五步:执行go build
执行go build,会生成可执行文件$home/tmp/hello/hello。
第六步:执行hello文件
执行hello文件,输出“你好,世界”。
推荐:go语言教程
以上就是go语言两种版本的hello world你会吗的详细内容。