【環境篇】搭建golang開發環境

image

學習一門語言,不少人都會是從搭建環境開始。有的語言的環境比較複雜,而有的語言環境很簡單。對於go而言,說簡單,的確不難,但有些概念須要先對其有所理解,才知道爲何這麼用。網上對於怎麼搭建一個golang開發環境已有了不少的教程,在這裏我會簡單介紹,不作過多描述。本篇文章僅對一些概念進行介紹,以及分享對一些我本人搭建開發環境的心得與技巧,若有錯誤,歡迎指正和交流。mysql

搭建golang環境

1.到golang下載地址下載對應環境的安裝包或者源碼,如果Linux環境的話,將源碼包下載解壓以後,放至/usr/local/(實際上放至合適位置便可,只要把它添加進PATH就行),如:linux

export PATH=$PATH:/usr/local/go/bingolang

2.配置GOPATH、GOROOT,這裏可能須要解釋一下,對於新手來講,確定不熟悉這兩個環境變量的意義。sql

GOROOT:golang的安裝目錄。docker

GOPATH:go的工做空間,在GOPATH下會有三個目錄:src,bin,pkg。shell

src:存放源碼(在不設置go mod的狀況下,go get的包放至這裏,你本身的項目源碼也能夠放在這裏);windows

bin:編譯後的可執行文件放置的位置,若是在你項目go install,生成的可執行文件會放在此處;安全

pkg:存放編譯時產生的文件(.a文件)並根據平臺進行歸檔,好比,windows64下產生的文件放在windows_amd64目錄下,一般狀況下,咱們不會太關心這些文件。不過在go module包管理方式下,pkg目錄變得受人關注了, 依賴的第三方包被下載到了$GOPATH/pkg/mod路徑下,而不是src文件夾。ide

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