IDEA Golang開發環境配置

本文從作者其它博客平臺遷移過來,文章寫於2019年部分內容有些陳舊,不影響整體思路。



2012年Go語言第一個正式版本至今已經歷時6年,因其優秀的性能,簡潔的併發以及高效的編譯等優勢市場份額逐步增多,越來越多的工程實踐開始選用Go語言作為基礎編程語言,其生態社區也逐步發展成型,下文將從零開始構建第一個Go Project。

Go 開發環境配置

以mac os為例,簡單的配置一下Go開發環境。

Step1: 安裝sdk

方式1:下載 go mac pkg文件進行軟件包 安裝

方式2:通過homebrew 管理軟件包

homebrew於mac如rpm包於linux,即mac下的軟件包管理程序。可以通過如下命令安裝homebrew

<code>/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"/<code>

使用homebrew管理go sdk:

brew install go 安裝brew uninstall go 卸載

Step2: 配置環境變量

個人一直使用oh my zsh, 直接編輯用戶目錄下的.zshrc文件即可,bash用戶可以直接修改~/.bashrc。

下圖為個人的環境配置:


其中/Users/yzq/Code/go是我個人的go workspace

理論上現在go環境已經ready了,執行source .zshrc;go version

Step3: IDE配置

工欲善其事,必先利其器 目前主流的編輯器都支持了Go,比如vim,sublime,vscode,atom,如何選擇完全看個人意願了,我一直在用的是Jetbrains的 IDEA Go插件(喜歡完備特性的可以使用同系GoLand),該插件官方的說法是cover了GoLand所有特性。

直接打開Preference->Plugins安裝Go插件即可(最新版本IDEA如果遇到無法檢索該插件,可通過鏈接 https://plugins.jetbrains.com/plugin/9568-go/versions 下載後,以本地文件方式安裝)

Go 工程實踐

下文將重點講述如何以工程化標準實踐為要求建設Go工程

瞭解Go的workspace

workspace即工作空間,不同到編程語言乃至不同到IDE對於工作空間都有不同的設計理念(可以參考eclipse與IDEA工作空間的設計理念),以Java系IDE idea為例其工作空間叫Project,一個project會對應一套工程配置比如copyright,code format, and other config,比如多個項目可能使用不同的配置,那麼這個時候就可以從工作空間緯度進行隔離。

而Go的設計很巧妙,其工作空間只有一個,下面引述官方doc的兩段描述:

Go programmers typically keep all their Go code in a single workspace.A workspace contains many version control repositories (managed by Git, for example).

A workspace is a directory hierarchy with three directories at its root:

src contains Go source files,pkg contains package objects, andbin contains executable commands.

下圖是我個人的工作空間目錄: ~/Code/go 已經在環境變量配置。

工作空間一級目錄


src目錄, 源碼倉庫按照服務進行劃分如


使用 go get xxx下載的源碼會自動到該目錄下

bin目錄,可執行二進制文件


pkg目錄,package object, build產物


最佳實踐 在工作空間規劃上應儘可能按照如上所示,尤其是源碼目錄儘可能按照項目歸屬版本管理系統比如github,gitlab劃分。

這樣做還有一個好處,當你多個代碼倉庫使用不同的賬號授權時候可以按照目錄進行配置,比如同時使用github與gitlab可以根據倉庫目錄進行gitconfig配置不同的User。

創建第一個Project

首先,我們按照Go推薦的做法完成了workspace的劃分,然後開始一個git項目,以我測試的demo為例,假設叫cool.go,源碼下載


目錄非常簡單,ecs,stringutil是兩個package,下面以ecs為例說明如何創建及使用一個package。

doc.go Go package的doc,用來生成go package document,源碼如下:

<code>/* ecs OpenApi demo,use aliyun ecs sdk manage ecs, this package will provide you function list as follows: DescribeInstances, query your account ecs. CreateInstance, create a ecs vm with specified params. */package ecsproxy/<code>

使用 go doc 查看package document


ecsproxy.go 核心代碼,該demo中主要封裝ecs sdk操作ecs OpenAPI,源碼如下:

<code>package ecsproxyimport ( "github.com/aliyun/alibaba-cloud-sdk-go/services/ecs" "fmt")//common init clientfunc initClient() (*ecs.Client, error) { ecsClient, err := ecs.NewClientWithAccessKey( "cn-shanghai", "", "") if err != nil { panic(err) } return ecsClient, err}func describeInstance() { ecsClient, err := initClient() request := ecs.CreateDescribeInstancesRequest() request.PageSize = "10" response, err := ecsClient.DescribeInstances(request) if err != nil { panic(err) } fmt.Print(response.Instances)}func createInstance() string { ecsClient, err := initClient() request := ecs.CreateCreateInstanceRequest() request.InstanceType = "ecs.n1.tiny" request.KeyPairName = "demo" var disks *[]ecs.CreateInstanceDataDisk var disk1 ecs.CreateInstanceDataDisk disk1.Size = "20" disk1.DeleteWithInstance = "true" disk1.Category = "cloud" request.DataDisk = disks response, err := ecsClient.CreateInstance(request) if err != nil { panic(err) } fmt.Print(response.InstanceId) return response.InstanceId}/<code>ecsproxy_test.go ecsproxy.go UT,源碼如下:

<code>package ecsproxyimport ( "testing")func TestDescribeInstance(t *testing.T) { describeInstance()}/<code>

運行ut,結果如下:


上面就是一個簡單的demo,通過調用aliyun ecs sdk實現ecs openapi操作,以上操作都是通過IDE圖形界面進行構建運行,建議初學者可以先了解以下go原生的構建,打包,運行命令(build,install,test)。

瞭解更多可以下載官方demo,執行go get __golang.org/x/tour/gotour

Go進階

以上簡單描述了Go的開發環境配置,工作空間劃分以及簡單demo,更多內容推薦閱讀:

官方doc Effective Gobuild web app with go