Golang实现将Hexo博客文章推送到微信公众号

Golang实现将Hexo博客文章推送到微信公众号 最近在写博客的时候,就在想,能不能实现博客更新了然后就自动给别人提醒呢?比如每天提醒更新了什么博客。然后就有了这个项目,我的想法就是通过golang进行爬虫,把所有的文章都存储起来,获取到新的文章,然后把新的文章连接进行整合,发送到微信公众号,这样所有的关注了微信公众号的,就能收到,每天更新的新的博客。 实现爬虫 这里我选择的是colly爬虫框架。然后把爬取的数据进行数据库存储。 package main import ( "fmt" "github.com/gocolly/colly" "regexp" "strings" "wx-blog/config" Redis "wx-blog/redis" "wx-blog/utils" ) func main() { i := config.

Golang遇上NSQ消息队列

简介 NSQ是一个基于Go语言的分布式实时消息平台, 它具有分布式、去中心化的拓扑结构,支持无限水平扩展。无单点故障、故障容错、高可用性以及能够保证消息的可靠传递的特征。另外,NSQ非常容易配置和部署, 且支持众多的消息协议。支持多种客户端,协议简单。 NSQ的几个组件 nsqd:一个负责接收、排队、转发消息到客户端的守护进程 nsqlookupd:管理拓扑信息, 用于收集nsqd上报的topic和channel,并提供最终一致性的发现服务的守护进程 nsqadmin:一套Web用户界面,可实时查看集群的统计数据和执行相应的管理任务 Docker安装 搭建主NSQ服务 获取到自己的服务器ip 我这里就是我服务器的外网ip 39.

Gin表单绑定验证器

gin中内置validator的基础使用 type UserLoginParam struct { Name string `form:"name" json:"name" binding:"required,min=2,max=30"` Password string `form:"password" json:"password" binding:"required,min=8,max=40"` } func TestValidator(t *testing.

Protobuf通信协议

RPC的调用过程 一个正常的RPC过程可以分为一下几个步骤: client调用client stub,这是一次本地过程调用。 client stub将参数打包成一个消息,然后发送这个消息。打包过程也叫做marshalling。 client所在的系统将消息发送给server。 server的的系统将收到的包传给server stub。 server stub解包得到参数。 解包也被称作 unmarshalling。 server stub调用服务过程。返回结果按照相反的步骤传给client。 在上述的步骤实现远程接口调用时,所需要执行的函数是存在于远程机器中,即函数是在另外一个进程中执行的。因此,就带来了几个新问题:

Golang开发分布式电商网站高并发秒杀系统

这个系统的主要目的在于秒杀,所有其他地方都做的很简单。基础功能不多! 技术栈: web框架:gin 消息队列:RabbitMQ 分布式方案:hash环

Golang中的ORM-Gorm的关联模型

Golang中的ORM-Gorm的关联模型 对于gorm的基础CRUD用法,这里就不论述了,这里主要说下关联模型的问题,因为我自己在查看官方文档进行关联模型操作的时候,总是感觉官方的例子很奇怪,用着很不明白。对于gorm的基础CRUD用法,不明白的可以看看官方文档:https://gorm.io/zh_CN/docs/models.html 创建数据库层面的外键: models.MysqlHandler.Model(&models.Order{}).AddForeignKey("user_id", "user(id)", "RESTRICT", "RESTRICT") 说说这里的RESTRICT,这里还可以填CASCADE、NO ACTION、RESTRICT、SET NULL。分别的意思是:

Golang微服务开发-grpc

什么是grpc grpc官网:https://www.grpc.io/ A high-performance, open-source universal RPC framework 这个是官方对他的解释。这里就出现了一个新的名称RPC。什么是RPC呢?

Golang实现一致性Hash算法

什么是一致性Hash算法 一致性Hash算法是使用取模的方法,一致性Hash算法是对2^32取模,什么意思呢?简单来说,一致性Hash算法将整个哈希值空间组织成一个虚拟的圆环,如假设某哈希函数H的值空间为0-2^32-1(即哈希值是一个32位无符号整形),整个哈希环如下: 圆环的正上方的点代表0,0点右侧的第一个点代表1,以此类推,2、3、4、5、6……直到2^32-1,也就是说0点左侧的第一个点代表2^32-1 我们把这个由2的32次方个点组成的圆环称为hash环。 假设我们有3台缓存服务器,服务器A、服务器B、服务器C,那么,在生产环境中,这三台服务器肯定有自己的IP地址,我们使用它们各自的IP地址进行哈希计算,使用哈希后的结果对2^32取模,可以使用如下公式示意 hash(服务器A的IP地址) % 2^32 通过上述公式算出的结果一定是一个0到2^32-1之间的一个整数,我们就用算出的这个整数,代表服务器A,既然这个整数肯定处于0到2^32-1之间,那么,上图中的hash环上必定有一个点与这个整数对应,而我们刚才已经说明,使用这个整数代表服务器A,那么,服务器A就可以映射到这个环上,用下图示意

Golang使用jwt

Golang中使用JWT(json web token) 什么是jwt 什么是jwt这里就不多说了,官网有介绍。官网介绍:https://jwt.io/introduction/ 使用步骤 下载依赖包 go get -u github.

Protoc-go修改生成的文件的结构体的tag

使用场景 在使用protoc生成的文件中生成的结构体的json没有小写,有时候我们就需要使用小写,最主要的就是在使用gin的时候还需要使用bind来绑定上传的东西。但是生成的*.pd.go又不建议我们去改。这时候就需要使用protoc-go-inject-tag,这里还有个更重要的地方,这里简单描述下:生成的结构体中的tag里面有个omitempty,这个的作用呢,就是在数据传输过程中,自动去掉false 0 ""这些数据。这里简单的举个例子,比如你的grpc服务端返回给客户端一个值为false的bool类型数据。但是在客户端接受的时候,这个字段就直接没有了。所以这样肯定是不行的。所以这里需要集体的去掉tag中的omitempty。这个时候protoc-go-inject-tag就可以满足这个需求。在之后的微服务(go-micro)开发中,这个也是很重要的地方! git地址:https://github.com/favadi/protoc-go-inject-tag 安装 go get github.com/favadi/protoc-go-inject-tag 使用 只需要在.