go
cqims21
这个作者很懒,什么都没留下…
展开
-
docker+jenkins+github实现golang项目自动部署
本文jenkins部署golang项目流程jenkins服务拉取github上的项目构建golang项目并生成docker镜像[jenkins调用的是宿主机上的docker环境,如何调用的,后面会说明]启动golang项目的docker镜像docker的安装这里就不说了docker安装jenkinsMakefilerun: docker run \ -u root \ -d...原创 2020-03-11 15:10:49 · 2014 阅读 · 1 评论 -
golang 用数组实现环形队列的方法
什么是队列队列是一种常用的数据结构,这种结构保证了数据是按照“先进先出”的原则进行操作的,即最先进去的元素也是最先出来的元素.环形队列是一种特殊的队列结构,保证了元素也是先进先出的,但与一般队列的区别是,他们是环形的,即队列头部的上个元素是队列尾部,通常是容纳元素数固定的一个闭环。环形队列的优点保证元素是先进先出的元素空间可以重复利用环形队列设的特征队首(head)与队尾(tai...原创 2020-03-10 14:50:11 · 516 阅读 · 0 评论 -
Golang解决TCP粘包拆包问题
什么是粘包问题最近在使用Golang编写Socket层,发现有时候接收端会一次读到多个数据包的问题。于是通过查阅资料,发现这个就是传说中的TCP粘包问题。下面通过编写代码来重现这个问题:服务端代码 server/main.gofunc main() { l, err := net.Listen("tcp", ":4044") if err != nil { panic(e...转载 2020-03-08 21:06:08 · 1898 阅读 · 0 评论 -
golang写的IM服务器(tcp,websocket,grpc)
本文转载:https://github.com/alberliu/gim简要介绍gim是一个即时通讯服务器,代码全部使用golang完成。主要功能1.支持tcp,websocket接入2.离线消息同步3.多业务接入4.单用户多设备同时在线5.单聊,群聊,以及超大群聊天场景6.支持服务水平扩展使用技术:数据库:Mysql+Redis通讯框架:Grpc长连接通讯协议:Pro...转载 2020-03-08 20:33:54 · 4004 阅读 · 0 评论 -
基于rabbitmq实现的延时队列(golang版)
虽然 rabbitmq 没有延时队列的功能,但是稍微变动一下也是可以实现的实现延时队列的基本要素存在一个倒计时机制:Time To Live(TTL)当到达时间点的时候会触发一个发送消息的事件:Dead Letter Exchanges(DLX) ~~~~~~ ...转载 2020-03-08 20:20:46 · 1447 阅读 · 2 评论 -
golang 如何通过unsafe.Pointer uintptr来实现string与byte互转
主要是对unsafe.Pointer uintptr的一个应用实例,顺便了解golang的string与slice底层是怎样实现的func Str2bytes(s string) []byte { x := (*[2]uintptr)(unsafe.Pointer(&s)) h := [3]uintptr{x[0], x[1], x[1]} return *(*[]byte)(...原创 2020-03-07 20:02:57 · 1641 阅读 · 0 评论 -
Go unsafe.Pointer uintptr原理和玩法
本文转至:https://www.cnblogs.com/sunsky303/p/11820500.htmlunsafe.Pointer这个类型比较重要,它是实现定位和读写的内存的基础,Go runtime大量使用它。官方文档对该类型有四个重要描述:(1)任何类型的指针都可以被转化为Pointer(2)Pointer可以被转化为任何类型的指针(3)uintptr可以被转化为Poin...转载 2020-03-06 14:47:00 · 534 阅读 · 0 评论 -
golang nsq消费者时间过长,防止与nsqd服务断开连接
在使用nsq消费时,发现如果HandleMessage方法执行时间超过2分钟,在此方法运行完后,就会 抛出 IO error - EOF 错误。测试发现,当超过2分钟时,nsqadmin 后台显示的节点未连接。在查看github Issues时,有人提出过,于是做了测试,发现一切正常。(在实际开发中,不建议把慢执行放在消费服务里,因为HandleMessage方法不执行完,是不会消费下一个队列消...原创 2020-03-04 13:56:08 · 989 阅读 · 0 评论 -
热重启golang服务器(graceful restart golang http server)
原文:热重启golang服务器(graceful restart golang http server)服务端代码经常需要升级,对于线上系统的升级常用的做法是,通过前端的负载均衡(如nginx)来保证升级时至少有一个服务可用,依次(灰度)升级。而另一种更方便的方法是在应用上做热重启,直接升级应用而不停服务。原理热重启的原理非常简单,但是涉及到一些系统调用以及父子进程之间文件句柄的传递...转载 2020-03-04 13:51:52 · 856 阅读 · 0 评论 -
golang通过结构体的继承、重写封装的一个高复用的公用查询
前言在golang开发中会发现,没有泛型会写大量重复代码,例如:对数据库表分页查询时,大多情况是表名不同,查询条件与查询字段不同,正常情况下,就得写多份重叠代码。本文主要是对过结构体继承(其实是组合),模拟泛型(用interface类型),来封装业务层的公用查询逻辑。其中会用到gorm查询时不固定定条件查询,可以看我另一篇博文go语言对gorm不固定条件查询封装思路既然要公用,那就得...原创 2020-03-04 13:40:29 · 1934 阅读 · 0 评论 -
golang 解析html时把url转绝对路径
golang 解析html时把url转绝对路径在golang解析html时,常遇到img、a标签的资源地址为相对路径[…/,./]的情况,这时就需要一个方法把这些地址转换为绝对路径。// 返回url的绝对地址// currUrl 当前urlfunc absUrl(currUrl, baseUrl string) string { urlInfo, err := url.Parse(c...原创 2020-02-25 18:26:46 · 994 阅读 · 1 评论 -
go语言对gorm不固定条件查询封装
主要对gorm不定条件查询数据时的一个封装【灵感来于laravel项目中对db的封装laravel版本DB,EloquentORM不固定条件查询封装】封装方法在 app/models/entity/Gorm.go文件里条件说明[“字段名”,“操作符”,“查询值”,“与前一个条件的关系[默认and]”] \1.如果是等于,可以省略"操作符" : []interface{}{“user...原创 2019-12-18 21:10:41 · 3605 阅读 · 2 评论