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了。
以上都是一些操作細節。連技術細節都不算,只是操作細節,唯一的價值,在於避免遺忘。