• 分类:【Golang
  • 浏览【131】
  • 评论【0】
  • 更新【2020-4-06 23:14:10】

在之前mgo是一个使用广泛的mongodb驱动器,不过从2018年开始已不再维护,虽然觉得怪可惜的,但也不推荐使用了,毕竟mongodb本身一直在迭代,如果驱动器不更新后续也没法使用。 详细说明见仓库:https://github.com/go-mgo/mgo 而mongodb提供了官方驱动,目前能找到的中文文档大多比较旧了,推荐直接看官方文档,有完整的操作手册:https://www.mongodb.com/blog/search/golang 本文也不想做一次搬运工,毕竟也不能随时保持更新,还是直接看官方文档比较好。下面列出一些主要的文章链接: Stack Overflow Resear

阅读全文
  • 分类:【Golang
  • 浏览【256】
  • 评论【0】
  • 更新【2020-3-30 10:29:13】

gorm概述 全功能ORM(几乎) 关联(包含一个,包含多个,属于,多对多,多种包含) Callbacks(创建/保存/更新/删除/查找之前/之后) 预加载(急加载) 事务 复合主键 SQL Builder 自动迁移 日志 可扩展,编写基于GORM回调的插件 每个功能都有测试 开发人员友好 已上支持基本满足了日常开发需要,一些基本的查询需求可以查看文档得到解决,不过文档并没有覆盖所有日常开发案例,尤其是一些组合需求,本文挑了一段常见的场景。 func (u *userService) GetuserList(offset, limit int, search User) (users []

阅读全文
  • 分类:【Golang
  • 浏览【473】
  • 评论【0】
  • 更新【2020-3-17 17:41:28】

线上部署 在线上部署就不能使用go run main.go命令了,需要打包编译成可执行文件。 linux系统需要这样编译:GOOS=linux go build -o service main.go,就是在windows系统上进行交叉编译,可根据自己服务器情况修改参数。 go build -o service main.go go build -o api api/api.go 线上的restful api也不能使用micro api了。需要选择适合自己的web服务框架,在web服务中调用api服务。 etcd启动 线上etcd和本地启动有区别,如果etcd是单独的服务器,那么在不加任何参

阅读全文
  • 分类:【Golang
  • 浏览【861】
  • 评论【0】
  • 更新【2020-3-14 15:21:50】

很遗憾,go-micro v2版本不再使用consul作为服务发现中间件,官方文档也没有consul相关的文档,而是默认改用了mdns,生产推荐etcd。 问题:I can't set registry with consul 解答:《Deprecating Consul in favour of Etcd》 超过4年的时间,Consul一直是Micro的默认服务发现系统之一,为我们提供了良好的服务。实际上,从一开始,它就是用于注册表的默认机制以及入门所需的唯一基础依赖项。 从那时起,世界在不断发展,原生云技术也在不断发展。我们发现了许多与使用Consul的方式有关的问题。这不是对Con

阅读全文
  • 分类:【Golang
  • 浏览【230】
  • 评论【0】
  • 更新【2020-1-16 22:28:04】

beego是一个优秀的api,web框架,不只是其丰富的功能特性,更是因为其功能的独立性,可以根据自身需要单独添加使用。 常用的模块有以下这些: session 模块 cache 模块 logs 模块 httplib 模块 context 模块 toolbox 模块 config 模块 i18n 模块 本文要讲解的是httplib客户端请求的使用。 日常开发中不只是要接收请求,还会发起http请求,go本身提供了http库可以实现http请求,不过使用起来略微复杂一些。如果使用的框架是beego的话,那推荐使用httplib。 基本使用方法 import ( "github.com

阅读全文
  • 分类:【Golang
  • 浏览【1162】
  • 评论【0】
  • 更新【2019-2-23 15:11:03】

说起将开发好的程序部署到服务上,常用的有两种方式: 本地编译打包,上传到服务器 git push到远程仓库,在服务器上拉取(编译-打包) 无论以怎样的方式发布,都只有熟悉流程才能得心应手。今天我要说的是golang的部署流程。 如果是在公司内,自然有专人负责发布事宜,也有公司暂无运维人员,这时还是由开发人员负责服务器发布工作,当然,CI/CD这类工具一般也没有搭建起来。但这并不影响我们快速发布。 得益于go的编译速度,整个发布过程可能也就2分钟,接下来说明一下我个人的发布流程: 在项目目录下执行go打包命令 GOOS=linux GOARCH=amd64 go build 由于是要

阅读全文
  • 分类:【Golang
  • 浏览【909】
  • 评论【0】
  • 更新【2019-2-12 22:12:03】

一、安装gRPC $ go get -u google.golang.org/grpc package google.golang.org/grpc: unrecognized import path "google.golang.org/grpc" (https fetch: Get https://google.golang.org/grpc?go-get=1: dial tcp 216.239.37.1:443: connectex: A connection attempt failed because the connected party did not p

阅读全文
  • 分类:【Golang
  • 浏览【898】
  • 评论【0】
  • 更新【2018-6-29 21:05:59】

go可以很容易实现一个文件服务器,只需要使用函数 func ServeFile(w ResponseWriter, r *Request, name string)即可。 package main import ( "log" "net/http" "fmt" ) func helloHandler(res http.ResponseWriter, req *http.Request) { http.ServeFile(res, req, "E:/go-work/src/go-learning/foo.xlsx") } func main() { fmt.Println("web

阅读全文
  • 分类:【Golang
  • 浏览【2565】
  • 评论【0】
  • 更新【2018-4-15 21:21:36】

beego注解路由匹配不到,返回404页面 router.go使用了两种方式注册路由: ns := beego.NewNamespace("/admin", beego.NSRouter("/", &controllers.UserController{}, "get:Welcome"), beego.NSInclude( &controllers.UserController{}, ), controller中的路由注解设置: // @router /admin/user/get-all-user [get] func (c *UserGroupController) GetA

阅读全文
  • 分类:【Golang
  • 浏览【919】
  • 评论【0】
  • 更新【2018-4-09 19:08:42】

go语言可以很轻松的实现并发获取数据,就算是新手也可以按部就班的套用现成的并发模式来实现并发。以下是一个简单的测试程序,其中有串行,并行。 package main import ( "sync" "time" "fmt" ) func main() { syncFunc() fmt.Println(">>>>>>>>>>>>>>>") asyncFunc() fmt.Println(">>>>>>>>>>>>>>>") asyncChanFunc() } // 串行执行 func syncFunc() { var n,m,x int start := time.Now(

阅读全文