<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[cqims21的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/cqims21</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; cqims21]]></copyright><item><title><![CDATA[docker+jenkins+github实现golang项目自动部署]]></title><link>https://blog.youkuaiyun.com/cqims21/article/details/104797234</link><guid>https://blog.youkuaiyun.com/cqims21/article/details/104797234</guid><author>cqims21</author><pubDate>Wed, 11 Mar 2020 15:10:49 +0800</pubDate><description><![CDATA[本文jenkins部署golang项目流程

jenkins服务拉取github上的项目
构建golang项目并生成docker镜像[jenkins调用的是宿主机上的docker环境，如何调用的，后面会说明]
启动golang项目的docker镜像

docker的安装这里就不说了
docker安装jenkins
Makefile
run:
	docker run \
	-u root \
	-d...]]></description><category></category></item><item><title><![CDATA[golang 用数组实现环形队列的方法]]></title><link>https://blog.youkuaiyun.com/cqims21/article/details/104774513</link><guid>https://blog.youkuaiyun.com/cqims21/article/details/104774513</guid><author>cqims21</author><pubDate>Tue, 10 Mar 2020 14:50:11 +0800</pubDate><description><![CDATA[什么是队列
队列是一种常用的数据结构，这种结构保证了数据是按照“先进先出”的原则进行操作的，即最先进去的元素也是最先出来的元素.环形队列是一种特殊的队列结构，保证了元素也是先进先出的，但与一般队列的区别是，他们是环形的，即队列头部的上个元素是队列尾部，通常是容纳元素数固定的一个闭环。
环形队列的优点

保证元素是先进先出的
元素空间可以重复利用

环形队列设的特征

队首(head)与队尾(tai...]]></description><category></category></item><item><title><![CDATA[mysql事务隔离级别详解]]></title><link>https://blog.youkuaiyun.com/cqims21/article/details/104753333</link><guid>https://blog.youkuaiyun.com/cqims21/article/details/104753333</guid><author>cqims21</author><pubDate>Mon, 09 Mar 2020 15:22:11 +0800</pubDate><description><![CDATA[数据库事务
数据库事务(transaction)是访问并可能操作各种数据项的一个数据库操作序列，这些操作要么全部执行,要么全部不执行，是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。
性质

原子性：事务中的所有操作要么全部提交成功，要么全部失败回滚。
一致性：几个并行执行的事务，其执行结果必须与按某一顺序 串行执行的结果相一致。
隔离性：一个事务所做的修改在提交之...]]></description><category></category></item><item><title><![CDATA[Golang解决TCP粘包拆包问题]]></title><link>https://blog.youkuaiyun.com/cqims21/article/details/104740507</link><guid>https://blog.youkuaiyun.com/cqims21/article/details/104740507</guid><author>cqims21</author><pubDate>Sun, 08 Mar 2020 21:06:08 +0800</pubDate><description><![CDATA[什么是粘包问题
最近在使用Golang编写Socket层，发现有时候接收端会一次读到多个数据包的问题。于是通过查阅资料，发现这个就是传说中的TCP粘包问题。下面通过编写代码来重现这个问题：
服务端代码 server/main.go
func main() {
   l, err := net.Listen("tcp", ":4044")
   if err != nil {
   	panic(e...]]></description><category></category></item><item><title><![CDATA[golang写的IM服务器（tcp,websocket,grpc）]]></title><link>https://blog.youkuaiyun.com/cqims21/article/details/104739815</link><guid>https://blog.youkuaiyun.com/cqims21/article/details/104739815</guid><author>cqims21</author><pubDate>Sun, 08 Mar 2020 20:33:54 +0800</pubDate><description><![CDATA[本文转载：https://github.com/alberliu/gim

简要介绍
gim是一个即时通讯服务器，代码全部使用golang完成。主要功能
1.支持tcp，websocket接入
2.离线消息同步
3.多业务接入
4.单用户多设备同时在线
5.单聊，群聊，以及超大群聊天场景
6.支持服务水平扩展
使用技术：
数据库：Mysql+Redis
通讯框架：Grpc
长连接通讯协议：Pro...]]></description><category></category></item><item><title><![CDATA[基于rabbitmq实现的延时队列(golang版)]]></title><link>https://blog.youkuaiyun.com/cqims21/article/details/104739532</link><guid>https://blog.youkuaiyun.com/cqims21/article/details/104739532</guid><author>cqims21</author><pubDate>Sun, 08 Mar 2020 20:20:46 +0800</pubDate><description><![CDATA[虽然 rabbitmq 没有延时队列的功能,但是稍微变动一下也是可以实现的
实现延时队列的基本要素

存在一个倒计时机制:Time To Live(TTL)
当到达时间点的时候会触发一个发送消息的事件:Dead Letter Exchanges（DLX）
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~~~~~&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...]]></description><category></category></item><item><title><![CDATA[golang 如何通过unsafe.Pointer uintptr来实现string与byte互转]]></title><link>https://blog.youkuaiyun.com/cqims21/article/details/104720811</link><guid>https://blog.youkuaiyun.com/cqims21/article/details/104720811</guid><author>cqims21</author><pubDate>Sat, 07 Mar 2020 20:02:57 +0800</pubDate><description><![CDATA[主要是对unsafe.Pointer uintptr的一个应用实例，顺便了解golang的string与slice底层是怎样实现的

func Str2bytes(s string) []byte {
	x := (*[2]uintptr)(unsafe.Pointer(&amp;s))
	h := [3]uintptr{x[0], x[1], x[1]}
	return *(*[]byte)(...]]></description><category></category></item><item><title><![CDATA[Go unsafe.Pointer uintptr原理和玩法]]></title><link>https://blog.youkuaiyun.com/cqims21/article/details/104695924</link><guid>https://blog.youkuaiyun.com/cqims21/article/details/104695924</guid><author>cqims21</author><pubDate>Fri, 06 Mar 2020 14:47:00 +0800</pubDate><description><![CDATA[本文转至：https://www.cnblogs.com/sunsky303/p/11820500.html

unsafe.Pointer

这个类型比较重要，它是实现定位和读写的内存的基础，Go runtime大量使用它。官方文档对该类型有四个重要描述：
（1）任何类型的指针都可以被转化为Pointer
（2）Pointer可以被转化为任何类型的指针
（3）uintptr可以被转化为Poin...]]></description><category></category></item><item><title><![CDATA[golang nsq消费者时间过长，防止与nsqd服务断开连接]]></title><link>https://blog.youkuaiyun.com/cqims21/article/details/104652391</link><guid>https://blog.youkuaiyun.com/cqims21/article/details/104652391</guid><author>cqims21</author><pubDate>Wed, 04 Mar 2020 13:56:08 +0800</pubDate><description><![CDATA[在使用nsq消费时，发现如果HandleMessage方法执行时间超过2分钟，在此方法运行完后，就会 抛出 IO error - EOF 错误。测试发现，当超过2分钟时，nsqadmin 后台显示的节点未连接。在查看github Issues时，有人提出过，于是做了测试，发现一切正常。（在实际开发中，不建议把慢执行放在消费服务里，因为HandleMessage方法不执行完，是不会消费下一个队列消...]]></description><category></category></item><item><title><![CDATA[laravel 服务容器bind与上下文绑定的一个应用实例]]></title><link>https://blog.youkuaiyun.com/cqims21/article/details/104652376</link><guid>https://blog.youkuaiyun.com/cqims21/article/details/104652376</guid><author>cqims21</author><pubDate>Wed, 04 Mar 2020 13:54:58 +0800</pubDate><description><![CDATA[laravel 服务容器是一个用于管理类的依赖和执行依赖注入的强大工具。其实就是一个超强IoC与DI工具。
下面是laravel服务容器的一个bind与上下文绑定的实现。

interface IUser
{
    public function getModel();
}

class Model
{
    public $name;
}

class Man implements IUs...]]></description><category></category></item><item><title><![CDATA[Laravel 创建自己的 Facade]]></title><link>https://blog.youkuaiyun.com/cqims21/article/details/104652353</link><guid>https://blog.youkuaiyun.com/cqims21/article/details/104652353</guid><author>cqims21</author><pubDate>Wed, 04 Mar 2020 13:54:01 +0800</pubDate><description><![CDATA[博客原文：Laravel 创建自己的 Facade

前言
laravel 提供了一个灵活的模式，那就是 facade 。框架内部的 DB、Auth、File 等功能也有相关的 facade 实现。那么，该如何写自己的 facade 呢？
Facade 是什么？
首先，facade 并不是 laravel 独有的东西，它就是设计模式中的外观模式(Facade)。
当然，这里就不长篇大论去讨论外观...]]></description><category></category></item><item><title><![CDATA[热重启golang服务器(graceful restart golang http server)]]></title><link>https://blog.youkuaiyun.com/cqims21/article/details/104652304</link><guid>https://blog.youkuaiyun.com/cqims21/article/details/104652304</guid><author>cqims21</author><pubDate>Wed, 04 Mar 2020 13:51:52 +0800</pubDate><description><![CDATA[原文：热重启golang服务器(graceful restart golang http server)

服务端代码经常需要升级，对于线上系统的升级常用的做法是，通过前端的负载均衡（如nginx）来保证升级时至少有一个服务可用，依次（灰度）升级。
而另一种更方便的方法是在应用上做热重启，直接升级应用而不停服务。
原理

热重启的原理非常简单，但是涉及到一些系统调用以及父子进程之间文件句柄的传递...]]></description><category></category></item><item><title><![CDATA[laravel Scout使用elasticsearch搜索引擎]]></title><link>https://blog.youkuaiyun.com/cqims21/article/details/104652276</link><guid>https://blog.youkuaiyun.com/cqims21/article/details/104652276</guid><author>cqims21</author><pubDate>Wed, 04 Mar 2020 13:50:32 +0800</pubDate><description><![CDATA[Laravel Scout 是针对Eloquent 模型开发的一个简单的，基于驱动的全文检索系统。Scout 使用模型观察者时会自动保持你的检索索引与你的 Eloquent 记录同步。
目前，Scout 带着一个Algolia驱动；然而，扩展 Scout 并不难，你可以通过自定义驱动来自由的扩展 Scout。Scout的使用请看文档Scout 全文搜索

docker安装elasticsearc...]]></description><category></category></item><item><title><![CDATA[logstash把mysql数据导入es所需配置]]></title><link>https://blog.youkuaiyun.com/cqims21/article/details/104652221</link><guid>https://blog.youkuaiyun.com/cqims21/article/details/104652221</guid><author>cqims21</author><pubDate>Wed, 04 Mar 2020 13:49:15 +0800</pubDate><description><![CDATA[logstash conf的output内容
output {
   if [type]=="bbs" {
           elasticsearch {
               hosts =&gt; ["http://es.service:9200"]
                   user =&gt; ""
                   password =&gt...]]></description><category></category></item><item><title><![CDATA[golang通过结构体的继承、重写封装的一个高复用的公用查询]]></title><link>https://blog.youkuaiyun.com/cqims21/article/details/104652100</link><guid>https://blog.youkuaiyun.com/cqims21/article/details/104652100</guid><author>cqims21</author><pubDate>Wed, 04 Mar 2020 13:40:29 +0800</pubDate><description><![CDATA[前言

在golang开发中会发现，没有泛型会写大量重复代码，例如：对数据库表分页查询时，大多情况是表名不同，查询条件与查询字段不同，正常情况下，就得写多份重叠代码。本文主要是对过结构体继承(其实是组合)，模拟泛型(用interface类型)，来封装业务层的公用查询逻辑。
其中会用到gorm查询时不固定定条件查询，可以看我另一篇博文go语言对gorm不固定条件查询封装

思路

既然要公用，那就得...]]></description><category></category></item><item><title><![CDATA[golang 解析html时把url转绝对路径]]></title><link>https://blog.youkuaiyun.com/cqims21/article/details/104502593</link><guid>https://blog.youkuaiyun.com/cqims21/article/details/104502593</guid><author>cqims21</author><pubDate>Tue, 25 Feb 2020 18:26:46 +0800</pubDate><description><![CDATA[golang 解析html时把url转绝对路径

在golang解析html时，常遇到img、a标签的资源地址为相对路径[…/，./]的情况，这时就需要一个方法把这些地址转换为绝对路径。

// 返回url的绝对地址
// currUrl 当前url
func absUrl(currUrl, baseUrl string) string {
	urlInfo, err := url.Parse(c...]]></description><category></category></item><item><title><![CDATA[laravel版本DB,EloquentORM不固定条件查询封装]]></title><link>https://blog.youkuaiyun.com/cqims21/article/details/103605004</link><guid>https://blog.youkuaiyun.com/cqims21/article/details/103605004</guid><author>cqims21</author><pubDate>Wed, 18 Dec 2019 21:13:49 +0800</pubDate><description><![CDATA[支持DB与ORM的来构建查询。
DB构建sql语句已在多个项目中使用，ORM是才加入的，没有经过太多测试。
where条件构建说明

参数： [“字段名”,“操作符”,“查询值”,“与前一个条件的关系[默认and]”]  与db的where方法一致
1.如果是等于，可以省略"操作符" : 
[“username”, “chen”] 或 [“username”,"=" , “chen”]
2.大于:...]]></description><category></category></item><item><title><![CDATA[go语言对gorm不固定条件查询封装]]></title><link>https://blog.youkuaiyun.com/cqims21/article/details/103604914</link><guid>https://blog.youkuaiyun.com/cqims21/article/details/103604914</guid><author>cqims21</author><pubDate>Wed, 18 Dec 2019 21:10:41 +0800</pubDate><description><![CDATA[主要对gorm不定条件查询数据时的一个封装【灵感来于laravel项目中对db的封装laravel版本DB,EloquentORM不固定条件查询封装】

封装方法在 app/models/entity/Gorm.go文件里

条件说明

[“字段名”,“操作符”,“查询值”,“与前一个条件的关系[默认and]”] \
1.如果是等于，可以省略"操作符" : 
[]interface{}{“user...]]></description><category></category></item></channel></rss>