【环境篇】搭建golang开发环境

image

学习一门语言,很多人都会是从搭建环境开始。有的语言的环境比较复杂,而有的语言环境很简单。对于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环境至此已经结束,就这么简单?就这么简单,但还有其他事情可以继续说下去,接下来我会分享一下我平时的开发习惯或者经验。
gorun.png

实用的golang开发环境技巧

1.利用虚拟机共享目录来应对不同环境

有这样一个场景:有个go项目,它的打包方式是make,但是我们想在Windows下编写代码,在Windows下正常情况下没有make工具,而Linux有。当然有人会提出,那就在Windows下安装相应的make工具就好了,的确如此,这样就解决问题了。我接下来所要讲的技巧权当做一种另外的解题思路。
首先,安装一个Linux虚拟机,创建好之后设置共享目录:
vm1.png

vm2.png

vm3.png

vm4.png

vm5.png

在我的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

③ 将对应端口转发出来:
mysql-port.png
④ 在Windows下用熟手的工具去操作,可以用navicat等工具,我个人比较喜欢都在IDE里执行:
mysql-connect.png
如此一来,我们就可以利用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,会整理相关的文档和资料。

image

猜你喜欢

转载自blog.51cto.com/14664952/2466515