学习一门语言,很多人都会是从搭建环境开始。有的语言的环境比较复杂,而有的语言环境很简单。对于go而言,说简单,的确不难,但有些概念需要先对其有所理解,才知道为什么这么用。网上对于怎么搭建一个golang开发环境已有了很多的教程,在这里我会简单介绍,不做过多描述。本篇文章仅对一些概念进行介绍,以及分享对一些我本人搭建开发环境的心得与技巧,如有错误,欢迎指正和交流。
搭建golang环境
1.到golang下载地址下载对应环境的安装包或者源码,若是Linux环境的话,将源码包下载解压之后,放至/usr/local/(实际上放至合适位置即可,只要把它添加进PATH就行),如:
export PATH=$PATH:/usr/local/go/bin
2.配置GOPATH、GOROOT,这里可能需要解释一下,对于新手来说,肯定不熟悉这两个环境变量的意义。
GOROOT:golang的安装目录。
GOPATH:go的工作空间,在GOPATH下会有三个目录:src,bin,pkg。
src:存放源码(在不设置go mod的情况下,go get的包放至这里,你自己的项目源码也可以放在这里);
bin:编译后的可执行文件放置的位置,如果在你项目go install,生成的可执行文件会放在此处;
pkg:存放编译时产生的文件(.a文件)并根据平台进行归档,比如,windows64下产生的文件放在windows_amd64目录下,通常情况下,我们不会太关心这些文件。不过在go module包管理方式下,pkg目录变得受人关注了,?依赖的第三方包被下载到了$GOPATH/pkg/mod路径下,而不是src文件夹。
3.下载一个合适的IDE,我个人比较喜欢用Goland,选择一个适合自己的IDE很重要,也有人喜欢vs code,这没有关系,只要自己使用顺手就行。
4.简单写段代码测试一下,go的安装情况如何,在$GOPATH/src下创建一个目录作为测试项目,创建一个main.go文件,代码如下:
package main
import (
"fmt"
)
func main() {
fmt.Print("Hello world!")
}
接着在项目根目录下go run main.go或者像我一样在IDE里面直接点击一下运行按钮即可。可以说搭建一个golang环境至此已经结束,就这么简单?就这么简单,但还有其他事情可以继续说下去,接下来我会分享一下我平时的开发习惯或者经验。
实用的golang开发环境技巧
1.利用虚拟机共享目录来应对不同环境
有这样一个场景:有个go项目,它的打包方式是make,但是我们想在Windows下编写代码,在Windows下正常情况下没有make工具,而Linux有。当然有人会提出,那就在Windows下安装相应的make工具就好了,的确如此,这样就解决问题了。我接下来所要讲的技巧权当做一种另外的解题思路。
首先,安装一个Linux虚拟机,创建好之后设置共享目录:
在我的Windows系统的D盘下有一个share目录,我将它共享到了虚拟机里面,并在Linux中为它创建了一个软连接,这样方便我查看和修改文件。share目录下的go目录即为我的GOPATH,我将虚拟机中的GOPATH设置成了同一个路径,这样子就可以在两个系统中共享同一份下载的源码。好了,现在我们可以在Windows下打代码,在Linux下编译了(有个Linux环境莫名的有安全感)。
2.利用docker和docker-compose进行开发
能够写一段简单的打印“hello world”的代码就证明你的开发环境搭建完毕了吗?很多时候,初学者看到的其他golang入门文章到此就结束了,但我觉得还有些可以继续进步的地方。很多项目会用到mysql、reids等,下面我会用docker和docker-compose为我们的项目提供支持。我的操作思路是在虚拟机安装docker和docker-compose,并安装mysql等,然后将端口转发出来。
① 在虚拟机中安装docker和docker-compose;
② 将创建工作目录,在该目录下创建一个docker-compose.yaml,接着运行如下:
version: ‘3‘
services:
mysql:
container_name: mysql
image: mysql:5.6
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: "123456"
MYSQL_ROOT_HOST: "%"
volumes:
- "./data:/var/lib/mysql" # 挂载数据目录
- "./config:/etc/mysql/conf.d" # 挂载配置文件目录
$ docker-compose up -d
③ 将对应端口转发出来:
④ 在Windows下用熟手的工具去操作,可以用navicat等工具,我个人比较喜欢都在IDE里执行:
如此一来,我们就可以利用docker和docker-compose创建一些我们需要的组件,并且在Windows和Linux下都连接成功。这么做有一些好处,我们可以在Windows下尽情的编码和测试,在Linux下去做编译和打包工作。不过,我并没有很详细地将这其中的操作过程写出来,这篇文章里主要提供一些思路,如有人有兴趣,我以后会写一篇跟工具有关的文章。
3.golang版本的选择
我在看官网的文档时,发现了一个有趣的东西,貌似平时没有很多人去关注。
Installing extra Go versions
It may be useful to have multiple Go versions installed on the same machine, for example, to ensure that a package‘s tests pass on multiple Go versions. Once you have one Go version installed, you can install another (such as 1.10.7) as follows:
$ go get golang.org/dl/go1.10.7
$ go1.10.7 download
The newly downloaded version can be used like?go
:
$ go1.10.7 version
go version go1.10.7 linux/amd64
All Go versions available via this method are listed on?the download page. You can find where each of these extra Go versions is installed by looking at its?
GOROOT
; for example,?go1.10.7 env GOROOT
. To uninstall a downloaded version, just remove its?GOROOT
?directory and the?goX.Y.Z
?binary.
这段文本是在说你可以通过go get的方式去安装其他的go版本,这种方式也比较简单。但应该很少人会有这样的需求了吧,因为一般来讲,go的版本安装最新的就行了,go的兼容做得很好,不会因为你的代码是几年之前写的就运行不起来。
小结
本篇文章看起来似乎不是很适合完完全全的新手,比如用到了docker、docker-compose,没错,是这样的,我的初衷是分享我的经验,然后提升自己,而不是写一篇网上已经有的文章。如果有人对我的文章有兴趣的话,我也愿意在有空的时候交流交流。
欢迎关注我的公众号:onepunchgo,会整理相关的文档和资料。
原文地址:https://blog.51cto.com/14664952/2466515