包含标签 golang 的文章

Go的第三方包的依赖管理

go modules、goproxy 关于go的第三方包的依赖管理,项目小的时候还不觉得多麻烦,当项目越来越大,引入的第三方包越来越多的时候,这个时候问题就很头痛了,golang官方建议是一个项目一个GOPATH,但是鉴于很多人都不这么做(我也不这么做,因为麻烦),于是在go1.11的时候推出了这个go modules来解决依赖管理的问题。 使用 由于这个go modules和GOPATH可能是天生不和,如果配置了GOPATH的话,这个go modules是默认不开启的。 开启也很简单,只要在命令行中键入下面命令就行了。 1 export GO111MODULE=on # 开启GoModule特性 不过这种是一次性的,重启之后就会消失,所以可以在环境信息文件/etc/profile的最后面添加上一行export GO111MODULE=on 使用命令source /etc/profile让其生效。 GO111MODULE解释, 当为on时则使用Go Modules,go 会忽略 $GOPATH和 vendor文件夹,只根据go.mod下载依赖。当为 off时则不适用新特性 Go Modules支持,它会查找 vendor目录和 $GOPATH来查找依赖关系,也就是继续使用“GOPATH模式”。当为 auto时或未设置时则根据当前项目目录下是否存在 go.mod文件或 $GOPATH/src之外并且其本身包含go.mod文件时才会使用新特性 Go Modules模式,并且auto为 GO111MODULE的默认值。 goproxy 关于goproxy,简单来说就是一个代理,让我们更方便的下载哪些由于墙的原因而导致无法下载的第三方包,比如golang.org/x/下的包,虽然也有各种方法解决,但是,如果是你在拉取第三方包的时候,而这个包又依赖于golang.org/x/下的包,你本地又恰恰没有,当然不嫌麻烦的话,也可以先拉取golang.org/x/下的包,再拉取第三方包。 这个goproxy强大地方就在于代理,而它官网是这样介绍自己的【A Global Proxy for Go Modules】,就是这么强大,全球代理,让世界没有难下的包 使用 一般来说,goproxy是和go modules配合使用的。 首先要确保go modules是开启的,如果没有开启可以在命令行键入下面命令即可 1 2 export GO111MODULE=on export GOPROXY=https://goproxy.io 不过这种是一次性的,重启之后就会消失,所以可以在环境信息文件/etc/profile的最后面添加上下面这两行 1 2 export GO111MODULE=on export GOPROXY=https://goproxy.io 最后使用source /etc/profile让其生效。……

阅读全文

Golang Gin 实战(五)| 接收数组和 Map

QueryArray 在实际的业务开发中,我们有些业务多选的,比如一个活动有多个人参加,一个问题有多个答案等等,对于这类业务功能来说,如果是通过查询参数提交的,它们的URL大概这样?a=b&a=c&a=d,key值都一样,但是对应的value不一样。 这类URL查询参数,就是一个数组,那么在Gin中我们如何获取它们呢? QueryMap QueryMap其实就是把满足一定格式的URL查询参数,转换为一个map,假设有a,b,c三个人,他们对应的id是123,456,789.那么用map的方式表示,这种格式类似于: ?ids[a]=123&ids[b]=456&ids[c]=789 … QueryMap 的原理 func (c *Context) QueryMap(key string) map[string]string { dicts, _ := c.GetQueryMap(key) return dicts } func (c *Context) GetQueryMap(key string) (map[string]string, bool) { c.getQueryCache() return c.get(c.queryCache, key) } QueryMap是通过GetQueryMap,最终都是c.get这个方法实现,我们只需要分析c.get就可以了。注意这里同样用到了getQueryCache进行缓存提高性能。 … 即刻独门秘籍 Golang Gin 实战(五)| 接收数组和 Map ……

阅读全文

Golang Gin 实战(四)| URL查询参数的获取和原理分析

查询参数(query parames) Querystring parameters ,翻译成中文我只能叫查询参数了,不过觉得挺别捏的。其实这种参数我们并不陌生,比如… Gin获取查询参数 在Gin中,为我们提供了简便的方法来获取查询参数的值,我们只需要知道查询参数的key(参数名)就可以了 Golang Gin 实战(四)| URL查询参数的获取和原理分析 ……

阅读全文

Golang Gin 实战(三)| 路由参数

路由路径 如下URL: /users/123 /users/456 /users/23456 以上等等,我们有很多用户,如果我们都一个个为这些用户注册这些路由(URL),那么我们是很难注册完的,而且我们还会有新注册的用户,可见这种办法不行。 我们观察这些路由(URL),发现它们具备一定的规则… 路由参数 在Gin中,要实现以上路由参数非常简单: func main() { r := gin.Default() r.GET("/users/:id", func(c *gin.Context) { id := c.Param("id") c.String(200, "The user id is %s", id) }) r.Run(":8080") } … 星号路由参数 号的路由参数,这种路由参数最常用。还有一种不常用的就是*号类型的参数,表示匹配所有。 Golang Gin 实战(三)| 路由参数 ……

阅读全文