【Go語言學習】配置Go語言開發環境,並寫第一個包

安裝 golang並配置環境變量

參考課程網站給出的教程

下載Go

可以到Go官方網站、或者Go中國項目組下載不同版本的Go,可以按照中文安裝指引參考。
以下給出在Ubuntu下一些簡要安裝說明。
如果是下載安裝包,則到下載目錄中執行以下命令:
$ tar -C /usr/local -xzf go$VERSION.$OS-$ARCH.tar.gz
也可以通過系統包管理工具安裝,不過版本可能不是最新的:
$ sudo apt install golang

安裝完成之後,使用以下命令測試是否成功安裝:
$ go version

配置環境變量

首先需要創建一個工作空間,當然能路徑你自己設置,下面給出參考:
$ mkdir $HOME/gowork
然後配置環境變量:

export GOPATH=$HOME/gowork
export PATH=$PATH:$GOPATH/bin

如果直接在命令行打下命令的話,下次開啓電腦又會恢復原樣,所以需要在~/.bashrc文件中最後的位置添加這兩條命令。(修改該文件需要root權限)如下圖所示:
bashrc
執行配置,重啓一下:

$ source $HOME/.profile

檢查環境是否配好:
$ go env
在這裏插入圖片描述

創建第一個go程序

首先創建源代碼目錄(命名供參考):
$ mkdir $GOPATH/src/github.com/github-user/hello -p

創建hello.go文件,並將以下代碼寫入:

package main

import "fmt"

func main() {
    fmt.Printf("hello, world\n")
}

執行:
$ go run hello.go

安裝VScode插件

VScode安裝的步驟就不詳細展開了,可以參考官方文檔
進入VScode,打開相應Go工作目錄,打開.go文件,會有相應提示安裝Go的擴展程序,按照提示安裝,會發現有部分無法安裝!由於網絡原因,不能獲取相應的資源。
所以需要手動安裝:
首先在%GOPATH%\src\目錄下,建立路徑golang.org\x
在該路徑下,將github上的工具包克隆到本地:

git clone https://github.com/golang/tools.git
git clone https://github.com/golang/lint.git

然後使用go install命令安裝相應的包。
如要安裝golint,則到golint相應目錄下執行go install或者直接用
go install golang.org/x/lint/golint
由於之前配置了GOPATH環境變量,所以執行的時候,會自動到%GOPATH%/src/中尋找目標。
如果其他插件也安裝失敗,可以到golang的github上尋找相應的項目,然後按照以上方法安裝其他插件。

編寫第一個Hello包

詳細參考如何使用Go編程.
回顧之前寫的hello.go程序:

package main

import "fmt"

func main() {
	fmt.Printf("Hello, world.\n")
}

我們是直接使用$ go run hello.go來運行它的。、

我們也可以使用$ go install來安裝構建這個程序(需要在該包目錄下),如果想要在其他地方運行,可以通過$ go install github.com/user/hello來安裝構建。其中github.com/user/hello爲工作目錄下src文件夾下的路徑,go 工具會根據 GOPATH 指定的工作空間,在 github.com/user/hello 包內查找源碼。

安裝完,我們可以看到工作目錄中創建了一個bin目錄(如果沒有才會自動創建)
,bin目錄下有hello的可執行文件。
而之前,我們將工作目錄下的bin文件夾配置爲系統環境變量,所以我們可以直接使用hello指令來運行它

$ hello
Hello, world.

編寫自己的第一個庫

同樣的創建庫目錄,路徑自己選擇,以下爲參考:
$ mkdir $GOPATH/src/github.com/user/stringutil
新建reverse.go文件,並寫入以下代碼:

package stringutil

// Reverse 將其實參字符串以符文爲單位左右反轉。
func Reverse(s string) string {
	r := []rune(s)
	for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {
		r[i], r[j] = r[j], r[i]
	}
	return string(r)
}

編譯該包:
$ go build github.com/user/stringutil
如果想生成相應的庫文件,則需要使用
$ go install github.com/user/stringutil
執行完之後,可以看到工作空間多出了pkg的目錄,該目錄下有linux_amd64/ (根據操作系統架構而不同),最底層是剛剛的庫文件:stringutil.a。

修改hello.go程序,使其引用剛剛創建的庫,並且輸出反轉的字符串:

package main

import (
	"fmt"

	"github.com/user/stringutil"
)

func main() {
	fmt.Printf(stringutil.Reverse("!oG ,olleH"))
}

同樣的安裝,並且測試輸出:
得到如下輸出:

$ hello
Hello, Go!

go test測試

可以通過創建一個名字以 _test.go 結尾的,包含名爲 TestXXX 且簽名爲 func (t *testing.T) 函數的文件來編寫測試。
stringutil目錄下創建一個reverse_test.go的文件,寫入以下代碼:

package stringutil

import "testing"

func TestReverse(t *testing.T) {
	cases := []struct {
		in, want string
	}{
		{"Hello, world", "dlrow ,olleH"},
		{"Hello, 世界", "界世 ,olleH"},
		{"", ""},
	}
	for _, c := range cases {
		got := Reverse(c.in)
		if got != c.want {
			t.Errorf("Reverse(%q) == %q, want %q", c.in, got, c.want)
		}
	}
}

這個測試就是定義一個二元組,二元組的第一個元素是輸入字符串,第二個是期望得到的反向字符串,然後對二元組的第一個元素執行Reverse操作(之前定義的函數),看是否能夠與期望字符串一致,如果不一致就報錯,以此來檢測Reverse的功能。
執行$ go test github.com/user/stringutil可以看到以下信息:

ok github.com/user/stringutil 0.165s
或者直接運行VScode插件的命令如圖:
在這裏插入圖片描述然後就會得到類似的輸出:
在這裏插入圖片描述
以上兩個包文件上傳到Github:傳送門
至此完成了第一個包的編寫以及測試。

安裝Go-tour

Go-tour是學習Go語言編程的指南,可以過在線訪問網站http://tour.go-zh.org
也可以下載安裝到本地,以離線的形式訪問。
按照官方的教程,在命令行執行: go get -u github.com/Go-zh/tour tour
但是由於網絡原因,可能不能夠安裝成功,所以需要第三方的源進行安裝:

使用Mercurial下載

對於Ubuntu,使用指令$ sudo apt-get install mercurial下載該工具,然後在命令行輸入hg指令確保安裝成功。

%GOPATH%/src/目錄下執行指令:
$ hg clone https://bitbucket.org/mikespook/go-tour-zh(類似git clone)

然後進入相應的目錄如
$ cd $GOPATH/src/bitbucket.org/mikespook/go-tour-zh/gotour

執行
$ go install,

也可以使用在任意路徑使用$ go install bitbucket.org/mikespook/go-tour-zh/gotour

安裝構建完成之後,會在bin文件夾生成gotour文件,直接運行:gotour
或者打開瀏覽器訪問http://127.0.0.1:3999
就能夠進入離線版的go-tour中文版了。

還有一種不那麼麻煩的方法,省去了clone和install的步驟:
直接使用go get bitbucket.org/mikespook/go-tour-zh/gotour就能夠在bin目錄生成相同的二進制文件。
如果中途出現錯誤,類似packge缺失信息:

package golang.org/x/net/websocket: unrecognized import path “golang.org/x/net/websocket” (https fetch: Get https://golang.org/x/net/websocket?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)

說明有某個工具沒有安裝,可以到github上尋找相應的庫克隆到本地的%GOPATH%/src/golang.org/x/目錄下,然後安裝相應的工具。如確實websocket的包,則先將net包clone本地,然後進入相應的目錄,執行go install

至此完成Go的基本配置!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章