go mod 下使用代理仓库开发 beego Web 项目

1. 关于 go mod 


Go.mod是Golang1.11版本新引入的官方包管理工具用于解决之前没有地方记录依赖包具体版本的问题,方便依赖包的管理。Go.mod其实就是一个Modules,关于Modules的官方定义为:Modules是相关Go包的集合,是源代码交换和版本控制的单元。go命令直接支持使用Modules,包括记录和解析对其他模块的依赖性。Modules替换旧的基于GOPATH的方法,来指定使用哪些源文件。Modules和传统的GOPATH不同,不需要包含例如src,bin这样的子目录,一个源代码目录甚至是空目录都可以作为Modules,只要其中包含有go.mod文件。


如何使用go.mod?

1.首先将go的版本升级为1.11以上

2.设置GO111MODULE

GO111MODULE

GO111MODULE有三个值:off, on和auto(默认值)。

GO111MODULE=off,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。

GO111MODULE=on,go命令行会使用modules,而一点也不会去GOPATH目录下查找。

GO111MODULE=auto,默认值,go命令行将会根据当前目录来决定是否启用module功能。这种情况下可以分为两种情形:

当前目录在GOPATH/src之外且该目录包含go.mod文件

当前文件在包含go.mod文件的目录下面。


go mod命令:

Usage:

	go mod <command> [arguments]

The commands are:

	download    download modules to local cache
	edit        edit go.mod from tools or scripts
	graph       print module requirement graph
	init        initialize new module in current directory
	tidy        add missing and remove unused modules
	vendor      make vendored copy of dependencies
	verify      verify dependencies have expected content
	why         explain why packages or modules are needed

go mod 得使用有点类似 js 的 npm, java 的 grandle, 命令解释如下:

download 下载依赖包

edit          编辑go.mod

graph 打印模块依赖图

init         在当前目录初始化mod

tidy         拉取缺少的模块,移除不用的模块

vendor 将依赖复制到vendor下

verify         验证依赖是否正确

why         解释为什么需要依赖


2. 设置 go mod 代理

golang1.13.x 可以直接执行:

go env -w GO111MODULE=on
go env -w GOPROXY=go env -w GOPRIVATE=*.gitlab.com
Go < 1.13
linux
export GO111MODULE=on
win
set GO111MODULE=on
设置代理
不开 go mod 代理不生效
linux
export GOPROXY=https://goproxy.cn
win
set GOPROXY=https://goproxy.cn

设置完成后执行 go env ,查看环境是否正确

GO111MODULE="on"
GOARCH="amd64"
GOBIN="/Users/guoshijiang/go_project/bin"
GOCACHE="/Users/guoshijiang/Library/Caches/go-build"
GOENV="/Users/guoshijiang/Library/Application Support/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOINSECURE=""
GONOPROXY="*.gitlab.com,*.gitee.com"
GONOSUMDB="*.gitlab.com,*.gitee.com"
GOOS="darwin"
GOPATH="/Users/guoshijiang/go_project"
GOPRIVATE="*.gitlab.com,*.gitee.com"
GOPROXY="https://goproxy.cn"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
GCCGO="gccgo"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/dev/null"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments 
-fmessage-length=0 -fdebug-prefix-map=/var/folders/4j/
qtk5l9wx1_dghlwp749lcncm0000gn/T/go-build715959339=/tmp/go-build 
-gno-record-gcc-switches -fno-common"

2. beego 安装


beego 的安装是典型的 Go 安装包的形式:

go get github.com/astaxie/beego


常见问题:

git 没有安装,请自行安装不同平台的 git,如何安装请自行搜索。

git https 无法获取,请配置本地的 git,关闭 https 验证:


git config --global http.sslVerify false

无法上网怎么安装 beego,目前没有好的办法,接下来我们会整理一个全包下载,每次发布正式版本都会提供这个全包下载,包含依赖包。


beego 的升级

beego 升级分为 go 方式升级和源码下载升级:

Go 升级,通过该方式用户可以升级 beego 框架,强烈推荐该方式:

go get -u github.com/astaxie/beego

源码下载升级,用户访问 https://github.com/astaxie/beego ,下载源码,然后覆盖到 $GOPATH/src/github.com/astaxie/beego 目录,然后通过本地执行安装就可以升级了:

go install  github.com/astaxie/beego


beego 命令行:

Bee is a Fast and Flexible tool for managing your Beego Web Application.

USAGE
    bee command [arguments]

AVAILABLE COMMANDS

    version     Prints the current Bee version
    migrate     Runs database migrations
    api         Creates a Beego API application
    bale        Transforms non-Go files to Go source files
    fix         Fixes your application by making it compatible with newer versions of Beego
    pro         Source code generator
    dlv         Start a debugging session using Delve
    dockerize   Generates a Dockerfile for your Beego application
    generate    Source code generator
    hprose      Creates an RPC application based on Hprose and Beego frameworks
    new         Creates a Beego application
    pack        Compresses a Beego application into a single file
    rs          Run customized scripts
    run         Run the application by starting a local development server
    server      serving static content over HTTP on port

Use bee help [command] for more information about a command.


3. beego 创建项目


bee new project

(trade) guoshijiangdeMacBook-Pro:GoWorkspace guoshijiang$ bee new project
2020/08/20 17:21:17 INFO     ▶ 0001 generate new project support go modules.
2020/08/20 17:21:17 INFO     ▶ 0002 Creating application...
	create	 /Users/guoshijiang/GoWorkspace/project/go.mod
	create	 /Users/guoshijiang/GoWorkspace/project/
	create	 /Users/guoshijiang/GoWorkspace/project/conf/
	create	 /Users/guoshijiang/GoWorkspace/project/controllers/
	create	 /Users/guoshijiang/GoWorkspace/project/models/
	create	 /Users/guoshijiang/GoWorkspace/project/routers/
	create	 /Users/guoshijiang/GoWorkspace/project/tests/
	create	 /Users/guoshijiang/GoWorkspace/project/static/
	create	 /Users/guoshijiang/GoWorkspace/project/static/js/
	create	 /Users/guoshijiang/GoWorkspace/project/static/css/
	create	 /Users/guoshijiang/GoWorkspace/project/static/img/
	create	 /Users/guoshijiang/GoWorkspace/project/views/
	create	 /Users/guoshijiang/GoWorkspace/project/conf/app.conf
	create	 /Users/guoshijiang/GoWorkspace/project/controllers/default.go
	create	 /Users/guoshijiang/GoWorkspace/project/views/index.tpl
	create	 /Users/guoshijiang/GoWorkspace/project/routers/router.go
	create	 /Users/guoshijiang/GoWorkspace/project/tests/default_test.go
	create	 /Users/guoshijiang/GoWorkspace/project/main.go
2020/08/20 17:21:17 SUCCESS  ▶ 0003 New application successfully created!

创建项目默认会生成以上这些文件


cd project

bee run 运行项目

(trade) guoshijiangdeMacBook-Pro:project guoshijiang$ bee run
______
| ___ \
| |_/ /  ___   ___
| ___ \ / _ \ / _ \
| |_/ /|  __/|  __/
\____/  \___| \___| v1.11.0
2020/08/20 17:22:50 WARN     ▶ 0001 Running application outside of GOPATH
2020/08/20 17:22:50 INFO     ▶ 0002 Using 'project' as 'appname'
2020/08/20 17:22:50 INFO     ▶ 0003 Initializing watcher...
go: finding module for package github.com/shiena/ansicolor
go: found github.com/shiena/ansicolor in github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644
project/controllers
project/routers
project
2020/08/20 17:22:54 SUCCESS  ▶ 0004 Built Successfully!
2020/08/20 17:22:54 INFO     ▶ 0005 Restarting 'project'...
2020/08/20 17:22:54 SUCCESS  ▶ 0006 './project' is running...
2020/08/20 17:22:54.135 [I] [asm_amd64.s:1373]  http server 
Running on http://:8080
2020/08/20 17:22:54.135 [C] [asm_amd64.s:1373]  ListenAndServe:  
listen tcp :8080: bind: address already in use


以上是项目正常运行的情况,可以在本项目中添加任意的 go 的第三方包使用,然后go build ,你会看到你的 go 文件出出现很多引用包,下面是示例:

module nakapay_service

go 1.14

require github.com/astaxie/beego v1.12.1

require (
   github.com/go-sql-driver/mysql v1.4.1
   github.com/lib/pq v1.0.0
   github.com/mattn/go-sqlite3 v1.10.0
   github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 // indirect
   github.com/smartystreets/goconvey v1.6.4
)

好,下一篇我们将讲深入解析 go mod 的命令和 beego 的命令。



0
260