1. 程式人生 > >GO專案編譯及執行

GO專案編譯及執行

近期下載了一個名為藍眼雲盤的專案作為學習研究用途。這是一個伺服器端用go語言開發的開源專案。

我從未用過GO語言,所以會遇到一些低階的問題要加以解決。總計解決了以下4個問題:
1、配置GOPATH
2、GOPATH分為全域性GOPATH和專案GOPATH
3、下載依賴包
4、設定專案輸出資料夾

我安裝了GO語言環境,使用jetbrains GoLand開發工具開啟專案,然後“Run”,報錯了。錯誤定位在主函式main.go裡,這一句:

import (
	"fmt"
	_ "github.com/go-sql-driver/mysql" <!--------------------------這裡
	"log"
	"net/http"
	"tank/rest"  <!--------------------------這裡
)

就說找不到相關的包。

我不太清楚確切的因由,像“github.com/go-sql-driver/mysql”很明顯是個包,找不到很正常,但“tank/rest”卻是有的,怎麼找不到呢?
在這裡插入圖片描述
於是按照網上的資料,一點點設定。

1、設定GOPATH
這是一個系統環境變數。
當初裝GO環境的時候,好像沒提到這個,但似乎不妨礙,我可以正常輸出“Hello World”。

hello.go

package main

import "fmt"

func main() {
    fmt.Println("Hello World!\r\n你好,leftfist!");
	fmt.Println("Hello Human!");
	if(3 > 4){
			fmt.Println("3 > 4");
	} else {
		fmt.Println("3 <= 4");
	}
}

這個GOPATH類似於Eclipse的WorkSpace,就是指向原始碼所在爺爺資料夾的。為什麼說是爺爺資料夾呢,是因為原始碼要放在:%GOPATH%/src/下。比如這個藍眼雲盤專案放在一個叫“tank”的資料夾裡,則它所在的位置是:%GOPATH%/src/tank。為啥一定要放在“src”裡呢,可能這就是GO的規矩吧,所謂約定大於配置。

2、GOPATH分為全域性GOPATH和專案GOPATH
上面說到,GOPATH指向原始碼存放資料夾,但將所有的GO專案都集中於一處,好像不合適。其實,GOPATH可以分為全域性GOPATH和專案GOPATH,可以分別指向不同的資料夾。
在這裡插入圖片描述

這樣子的話,一些公用包可以放在全域性GOPATH,而私貨只存放於專案GOPATH。

3、下載依賴包
我找了下,在goland裡沒有找到下載依賴包的命令。只能手動下載了。在%GOPATH%/src下,進入cmd視窗,敲入類似如下命令:

go get github.com/go-sql-driver/mysql

其實這個也可以直接在GoLand的命令列窗口裡完成
在這裡插入圖片描述

在這裡插入圖片描述

4、設定專案輸出資料夾
下載了依賴包以後,能編譯了,但不能正確執行。原因是,專案需要讀取一個配置檔案。這是這個專案本身的邏輯,與GO環境無關。這個配置檔案放在一個[/build/conf]的資料夾裡,看上去,專案執行之後,根目錄找不到它,就報錯了。
通過設定goland的專案配置解決。
在這裡插入圖片描述

在這裡插入圖片描述
將Run kind型別改為package,設定output directory到 build,可以run了。

以上都是一些操作細節。連技術細節都不算,只是操作細節,唯一的價值,在於避免遺忘。