• 分类:【Golang
  • 浏览【31】
  • 评论【0】
  • 更新【2020-7-27 21:09:20】

乱码的情况目前有两种可能: 常规乱码,网页非utf-8。 非常规乱码,代码导致的乱码。 关于常规乱码可参考issue获取中文网页有乱码的问题 #185 非常规乱码就像我遇到的一样,最开始以为是网页问题,使用了github.com/djimenez/iconv-go转换还是乱码,使用了golang.org/x/text/encoding/simplifiedchinese还是乱码。 试试英文网页,还是乱码。最终一点点调试发现是由header引起的。 req.Header.Add("Accept-Encoding", "gzip, deflate")

阅读全文
  • 分类:【Golang
  • 浏览【188】
  • 评论【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
  • 浏览【400】
  • 评论【0】
  • 更新【2020-3-30 10:29:13】

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

阅读全文
  • 分类:【Golang
  • 浏览【690】
  • 评论【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
  • 浏览【1174】
  • 评论【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
  • 浏览【282】
  • 评论【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
  • 浏览【1237】
  • 评论【0】
  • 更新【2019-2-23 15:11:03】

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

阅读全文
  • 分类:【Golang
  • 浏览【973】
  • 评论【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
  • 浏览【949】
  • 评论【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
  • 浏览【2684】
  • 评论【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

阅读全文