最近需要用beego编写程序,这里是环境搭建的踩坑记录。想看解决方案的直接滑到最下面即可。
省流一句话描述:远离GOPATH,否则会变得不幸,拥抱go mod,拥抱快乐!
环境
- go 1.12
- Ubuntu 20.04
踩坑记录
本次目的是安装beego和bee,然后启动一个简单的http服务
在尝试了无数次go get github.com/astaxie/beego
和go get -u github.com/beego/bee
后,收获了各种百度不到的错误,如下所示:
错误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
错误2:执行完命令控制台无任何输出
错误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
设置GOPROXY后依然如此,尝试用wireshark抓了下包,发现并没有走设置的代理。
在网上百度了一圈,解决的方法尝试了个遍也没用,还看到有人说直接换go 1.13问题解决,不过很明显咱不能换环境,于是痛定思痛,决定换go mod模式。
通过命令行export GO111MODULE=on
打开go mod模式,然后再次运行命令go get github.com/astaxie/beego
,收获了不一样的bug(控制台输出太长,这里截取一部分关键信息):
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
可以看到,历经千辛万苦,最终抛出了一个go get: error loading module requirements
的error,期间还夹杂了各种404,不过万幸的是这个请求终于走我们设置的代理了。
于是决定再换个方法,也是最终成功解决问题的方案。
成功方案
首先通过命令行export GO111MODULE=on
打开go mod模式,并通过export GOPROXY=https://goproxy.io
设置GOPROXY。
随意找个地方,执行如下命令初始化go mod:
mkdir test
cd test
go mod init test
然后就可以看到生成了一个go.mod
文件:
dubito@ubuntu:~/test$ ls
go.mod
然后新建文件server.go
,复制粘贴以下内容:
package main
import "github.com/astaxie/beego"
func main() {
beego.Run()
}
然后在当前目录执行命令运行文件:
go run server.go
就可以看到beego自动下载,程序运行成功,并成功运行了http服务:
所以其他项目同理,只需要使用go mod模式直接运行即可,不需要额外安装依赖。