最近需要用beego編寫程序,這里是環(huán)境搭建的踩坑記錄。想看解決方案的直接滑到最下面即可。
省流一句話描述:遠(yuǎn)離GOPATH,否則會(huì)變得不幸,擁抱go mod,擁抱快樂!
環(huán)境
- go 1.12
- Ubuntu 20.04
踩坑記錄
本次目的是安裝beego和bee,然后啟動(dòng)一個(gè)簡(jiǎn)單的http服務(wù)
在嘗試了無數(shù)次go get github.com/astaxie/beego和go get -u github.com/beego/bee后,收獲了各種百度不到的錯(cuò)誤,如下所示:
錯(cuò)誤1:
dubito@ubuntu:~$ go get github.com/astaxie/beego
# github.com/prometheus/procfs/internal/util
golib/src/github.com/prometheus/procfs/internal/util/parse.go:69:15: undefined: os.ReadFile
golib/src/github.com/prometheus/procfs/internal/util/parse.go:78:15: undefined: os.ReadFile
golib/src/github.com/prometheus/procfs/internal/util/readfile.go:36:9: undefined: io.ReadAll
# github.com/prometheus/common/expfmt
golib/src/github.com/prometheus/common/expfmt/text_create.go:46:27: undefined: io.Discard
錯(cuò)誤2:執(zhí)行完命令控制臺(tái)無任何輸出
錯(cuò)誤3:
dubito@ubuntu:~$ go get -u github.com/beego/bee
package github.com/beego/bee: cannot find package "github.com/beego/bee" in any of:
/usr/local/go/src/github.com/beego/bee (from $GOROOT)
/home/dubito/golib/src/github.com/beego/bee (from $GOPATH)
在嘗試通過export GOPROXY=https://goproxy.io設(shè)置GOPROXY后依然如此,嘗試用wireshark抓了下包,發(fā)現(xiàn)并沒有走設(shè)置的代理。
在網(wǎng)上百度了一圈,解決的方法嘗試了個(gè)遍也沒用,還看到有人說直接換go 1.13問題解決,不過很明顯咱不能換環(huán)境,于是痛定思痛,決定換go mod模式。
通過命令行export GO111MODULE=on打開go mod模式,然后再次運(yùn)行命令go get github.com/astaxie/beego,收獲了不一樣的bug(控制臺(tái)輸出太長(zhǎng),這里截取一部分關(guān)鍵信息):
dubito@ubuntu:~$ go get github.com/astaxie/beego
go: finding github.com/cloudflare/golz4 latest
.......
go get: upgrading github.com/alicebob/miniredis@v2.5.0+incompatible: unexpected status (https://goproxy.io/github.com/alicebob/miniredis/@v/list): 404 Not Found
go: finding google.golang.org/genproto latest
......
go: finding github.com/cncf/udpa/go latest
go get: upgrading gopkg.in/fsnotify.v1@v1.4.7: unexpected status (https://goproxy.io/gopkg.in/fsnotify.v1/@v/list): 404 Not Found
go: finding github.com/pkg/diff latest
......
go: finding github.com/ajstarks/deck latest
go get: error loading module requirements
可以看到,歷經(jīng)千辛萬苦,最終拋出了一個(gè)go get: error loading module requirements的error,期間還夾雜了各種404,不過萬幸的是這個(gè)請(qǐng)求終于走我們?cè)O(shè)置的代理了。
于是決定再換個(gè)方法,也是最終成功解決問題的方案。
成功方案
首先通過命令行export GO111MODULE=on打開go mod模式,并通過export GOPROXY=https://goproxy.io設(shè)置GOPROXY。
隨意找個(gè)地方,執(zhí)行如下命令初始化go mod:
mkdir test
cd test
go mod init test
然后就可以看到生成了一個(gè)go.mod文件:
dubito@ubuntu:~/test$ ls
go.mod
然后新建文件server.go,復(fù)制粘貼以下內(nèi)容:
package main
import "github.com/astaxie/beego"
func main() {
beego.Run()
}
然后在當(dāng)前目錄執(zhí)行命令運(yùn)行文件:
go run server.go
就可以看到beego自動(dòng)下載,程序運(yùn)行成功,并成功運(yùn)行了http服務(wù):

所以其他項(xiàng)目同理,只需要使用go mod模式直接運(yùn)行即可,不需要額外安裝依賴。