1. 程式人生 > 實用技巧 >簡單圖文配置golang+vscode【win10/centos7+golang helloworld+解決install failed等情況】

簡單圖文配置golang+vscode【win10/centos7+golang helloworld+解決install failed等情況】

Title:簡單圖文配置golang+vscode【win10/centos7+golang helloworld+解決install failed等情況】(閱讀時間:10分鐘)

一.win10

0.系統環境

作業系統:win10 家庭版 1909
硬體資訊(做基本的golang開發,硬體要求不高):

1. win10配置golang環境

①下載相關軟體

GO 1.15 https://golang.org/dl/
VSCODE https://code.visualstudio.com/
【注:本文主要著力於配置golang,省略安裝vscode的步驟】

②建立gowork工作空間

按照https://go-zh.org/doc/code.html

所說
在PC的任意目錄下建立gowork資料夾,並建立src、bin和pkg三個子資料夾。此處我將其放在固態硬碟所在的目錄。

Go程式碼必須放在工作空間內。它其實就是一個目錄,其中包含三個子目錄:

src 目錄包含Go的原始檔,它們被組織成包(每個目錄都對應一個包),
pkg 目錄包含包物件,
bin 目錄包含可執行命令。

③配置環境變數(GOPATH+PATH)

a.GOPATH
新建環境變數GOPATH,值為gowork目錄,如C:\gowork

b.PATH
在PATH下新增gowork目錄的bin資料夾,如C:\gowork\bin

④驗證環境配置結果

2. win10配置vscode go環境

①安裝vscode的go外掛

vscode新增go外掛


②嘗試執行

這時就可以在gowork/src目錄下寫一個hello.go:

package main
 
import "fmt"
 
func main() {
    fmt.Printf("Hello word")
}

此時在命令列輸入go run hello.go可以直接執行,但在vscode下還不能執行。

③vscode執行報錯情況(install failed)

用vscode開啟gowork/src目錄,右下角提示需要安裝依賴包

install all後出現以下情況:

Installing github.com/mdempsky/gocode FAILED
Installing github.com/uudashr/gopkgs/v2/cmd/gopkgs FAILED
Installing github.com/ramya-rao-a/go-outline FAILED
Installing github.com/acroca/go-symbols FAILED
Installing golang.org/x/tools/cmd/guru FAILED
Installing golang.org/x/tools/cmd/gorename FAILED
Installing github.com/cweill/gotests/... FAILED
Installing github.com/fatih/gomodifytags FAILED
Installing github.com/josharian/impl FAILED
Installing github.com/davidrjenni/reftools/cmd/fillstruct FAILED
Installing github.com/haya14busa/goplay/cmd/goplay FAILED
Installing github.com/godoctor/godoctor FAILED
Installing github.com/go-delve/delve/cmd/dlv FAILED
Installing github.com/stamblerre/gocode FAILED
Installing github.com/rogpeppe/godef FAILED
Installing github.com/sqs/goreturns FAILED
Installing golang.org/x/lint/golint FAILED

④vscode go配置

根據https://goproxy.io/zh/的介紹:

如果您使用的 Go 版本是 1.13 及以上 (推薦)
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.io,direct

# 設定不走 proxy 的私有倉庫,多個用逗號相隔(可選)
go env -w GOPRIVATE=*.corp.example.com

# 設定不走 proxy 的私有組織(可選)
go env -w GOPRIVATE=example.com/org_name

命令列輸入:

重新開啟Vscode -> install all,配置成功。

⑤再次執行golang+vscode helloworld

用vscode開啟gowork/src資料夾:

vscode除錯的快捷鍵為F5,按下F5執行程式碼如下:

至此,golang的helloworld已順利完成啦~~

3. 安裝與執行 go tour

在【二.centos7】中展示。

4. golang的第一個包與測試

在【二.centos7】中展示。

5. 其他可能遇到的問題

vscode使用F5進行除錯時,遇到 go:cannot find main module 的問題

在launch.json下進行如下配置,再執行除錯即可:

{
    // 使用 IntelliSense 瞭解相關屬性。 
    // 懸停以檢視現有屬性的描述。
    // 欲瞭解更多資訊,請訪問: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch",
            "type": "go",
            "request": "launch",
            "mode": "auto",
            "remotePath":"",
            "host": "127.0.0.1",
            "program": "${fileDirname}",
            "env": {
                "GO111MODULE": "off"
            },
            "args": [],
            "showLog": false,
            
        }
    ]
}

二.centos7

0.系統環境

作業系統:CentOS7
硬體資訊:使用virtual box配置虛擬機器(記憶體3G、磁碟30G)

1.virtual box安裝centos7

此步驟比較簡單,借鑑部落格即可輕鬆完成,由於不是主要內容,只貼出centos7下載地址和借鑑部落格。

centos7下載地址:https://www.centos.org/download/
借鑑部落格:https://www.cnblogs.com/gaomanito/p/11460381.html

2.centos7配置golang環境

①下載相關軟體+建立gowork工作空間+配置環境變數(GOPATH+PATH)+驗證環境配置結果

此處使用老師部落格上推薦的yum安裝的方法,至於部落格上提到的版本不是最新的問題,其實使用適當的源就可以解決。
依次輸入以下指令即可:

rpm --import https://mirror.go-repo.io/centos/RPM-GPG-KEY-GO-REPO
curl -s https://mirror.go-repo.io/centos/go-repo.repo | tee /etc/yum.repos.d/go-repo.repo
yum install golang

在安裝完golang後,與win10相似,需要自己建立gowork資料夾,並且配置GOPATH和PATH的環境變數。
依次輸入以下指令即可:

mkdir -p ~/go/{bin,pkg,src}
echo 'export GOPATH="$HOME/go"' >> ~/.bashrc
echo 'export PATH="$PATH:${GOPATH//://bin:}/bin"' >> ~/.bashrc

安裝並配置完畢後,輸入go version檢驗是否配置成功:

輸入go env檢查環境變數:

②建立helloworld

建立$GOPATH/src/github.com/user/hello資料夾如下:

mkdir $GOPATH/src/github.com/user/hello -p

用vscode建立hello.go檔案並使用以下程式碼:

package main

import "fmt"

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

使用go run hello.go執行如下:

3.centos7配置vscode go環境

使用rpm下載並安裝vscode,官方教程如下:https://code.visualstudio.com/docs/setup/linux#_rhel-fedora-and-centos-based-distributions

依次輸入以下指令即可:

sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo'
yum check-update
sudo yum install code

vscode配置go環境的方法與win10一致,請借鑑【一.win10】中的操作即可。

4.安裝與執行 go tour

根據https://github.com/Go-zh/tour配置gotour,並執行離線版的gotour,指令如下:

go get -u github.com/Go-zh/tour
./tour  //在$GOPATH/bin資料夾下生成tour

當然,也可以線上使用gotour:https://tour.go-zh.org/welcome/1
個人而言更傾向於前者,因為經測試本地執行速度更快。

5.golang的第一個包

首先,在進行測試前,務必要將之前為了配置vscode而設定的https://goproxy.io相關環境變數去掉,不然在go build時會報錯(比如會讓你輸入github的賬戶密碼,而無法搜尋到本地的github.com資料夾)。

go env -w GO111MODULE=off
go env -w GOPROXY=" "

①建立第一個庫
建立資料夾:

mkdir $GOPATH/src/github.com/user/stringutil

接著,用vscode在該目錄中建立名為 reverse.go 的檔案,內容如下:

// stringutil 包含有用於處理字串的工具函式。
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 mod init stringutil  //如果報錯cannot find main module,加上這行即可
go build


②修改
修改原來的 hello.go 檔案(它位於 $GOPATH/src/github.com/user/hello)去使用它:

package main

import (
	"fmt"

	"github.com/user/stringutil"
)

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

③執行
再次安裝 hello 程式時,stringutil 包也會被自動安裝。執行此程式的新版本,能看到一條新的,反向的資訊:

6.golang的第一個測試

根據教程(https://go-zh.org/doc/code.html)介紹,Go擁有一個輕量級的測試框架,它由 go test 命令和 testing 包構成。

我們可以通過建立一個名字以 _test.go 結尾的,包含名為 TestXXX 且簽名為 func (t *testing.T) 函式的檔案來編寫測試。

測試框架會執行每一個這樣的函式;若該函式呼叫了像 t.Error 或 t.Fail 這樣表示失敗的函式,此測試即表示失敗。

我們可通過建立檔案 $GOPATH/src/github.com/user/stringutil/reverse_test.go 來為 stringutil 新增測試,其內容如下:

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)
		}
	}
}

然後使用以下指令進行測試:

go test github.com/user/stringutil


由上可知已順利完成測試。

三.總結

本次實驗內容並不複雜,主要就是配置環境+簡單的golang helloworld水平的程式設計任務。
然而耗時還是較長,主要是因為第一次使用時遇到的坑比較多,比如虛擬機器安裝centos的坑、安裝golang配置環境變數的坑、安裝vscode因為GFW的原因得更換源的坑等等。
總的來說,本次實驗的收穫集中在環境的搭配上,希望在之後的實驗中,能在golang語言的應用上收穫更多。

四.References

老師部落格:https://pmlpml.gitee.io/service-computing/post/ex-install-go/
官方DOC:https://go-zh.org/doc/code.html
菜鳥程式設計golang:https://www.runoob.com/go/go-tutorial.html
安裝配置go:https://cloud.tencent.com/developer/article/1478660
安裝配置vscode:https://code.visualstudio.com/docs/setup/linux#_rhel-fedora-and-centos-based-distributions