随笔分类 -  go

摘要:图片来源网络 1.创建topic 2.启动三组go消费者 3.启动go生产者 4.第一组消费者输出 5.第二组消费者输出 6.第三组消费者输出 7.结论 1.消息将会被均匀的分布到不同的分区中 实现了负载均衡和水平扩展 2.消息会全量落到不同的消费者组 3.消费者组内的消费者共享一个消费者组ID 组 阅读全文
posted @ 2019-12-22 15:42 alin_qu 阅读(297) 评论(0) 推荐(0)
摘要:docker 搭建kafka环境 创建topic partitions为2个,replication有3个,topic的name为test_kafka 消费kafka数据 生产kafka数据 参考 http://zhongmingmao.me/2018/10/08/kafka install clu 阅读全文
posted @ 2019-11-29 23:33 alin_qu 阅读(1043) 评论(0) 推荐(0)
摘要:1.发现问题 生产环境发现有一些redis报错日志 connection pool exhausted。如果redis中没有数据 就直接回源 查DB。暂时不会有什么大问题。中文意思是连接池耗尽。 2.追踪问题 查看源码 我们用的redis客户端类似于redigo 按照错误提示搜索到了一段代码(基于最 阅读全文
posted @ 2019-09-28 15:48 alin_qu 阅读(2494) 评论(0) 推荐(0)
摘要:一:单元测试 1.为什么要做单元测试和性能测试 减少bug 快速定位bug 减少调试时间 提高代码质量 2.golang的单元测试 单元测试代码的go文件必须以_test.go结尾 单元测试的函数名必须以Test开头,是可导出公开的函数 测试函数的签名必须接收一个指向testing.T类型的指针,并 阅读全文
posted @ 2019-07-13 08:16 alin_qu 阅读(312) 评论(0) 推荐(0)
摘要:golang http 中间件 "源码链接" golang的http中间件的实现 首先实现一个http的handler接口 通过函数包裹的方式实现 中间件v1.0 1.通过匿名函数 将handler包裹起来 然后再 调用传进来的handler。在执行传进来的参数之前 就可以做到记录日志 等一些中间件 阅读全文
posted @ 2019-06-26 08:29 alin_qu 阅读(1132) 评论(0) 推荐(0)
摘要:``` //相对应for 循环 goroutine跑到慢 所以这里很大概率只会打印最后一条数据 func goRun() { values := []int{1, 2, 3} for _, v := range values { go func() { fmt.Println(v) }() } } //解决1 将参数传入匿名函数 这样参数就可以压栈了 func goRun2(... 阅读全文
posted @ 2019-04-20 13:53 alin_qu 阅读(933) 评论(0) 推荐(0)
摘要:golang并发 一:只有写操作 type Stat struct { counters map[string] int64 mutex sync.RWMutex } func InitStat() Stat { return Stat{counters: make(map[string] int6 阅读全文
posted @ 2019-03-31 18:56 alin_qu 阅读(5101) 评论(0) 推荐(0)
摘要:一:Error 二:Storage commands command name is "set", "add", "replace", "append" or "prepend" STORED:保存成功后输出 ERROR:在保存失败后输出 STORED:保存成功后输出 NOT_STORED :在保存 阅读全文
posted @ 2019-03-02 11:28 alin_qu 阅读(513) 评论(0) 推荐(0)
摘要:IO IO包 是对数据流的操作。从哪里来, 怎么处理,再到哪里去。 图片来源 https://medium.com/learning the go programming language/streaming io in go d93507931185 IO包 对数据的读写 是通过接口的形式约定的。 阅读全文
posted @ 2019-01-05 17:08 alin_qu 阅读(729) 评论(0) 推荐(0)
摘要:buffered channels 带有缓冲区的channel 只有在缓冲区满之后 channel才会阻塞 WaitGroup 如果有多个 goroutine在后台执行 那么需要在主线程中 多次等待 可以有一个简单的方法 就是 通过WaitGroup 可以控制 Goroutines 直到它们都执行完 阅读全文
posted @ 2018-03-12 11:52 alin_qu 阅读(256) 评论(0) 推荐(0)
摘要:Goroutines Goroutines 可以被认为是多个函数或方法同时允许。可以认为是一个轻量级的线程。与线程的花费相比是非常小的。 与线程相比的优势 Goroutines 非常的轻量级,只需要几kb的内存分配 并且是可以根据需要动态可伸缩的。而线程的内存分配大小是固定的 Goroutines 阅读全文
posted @ 2018-03-11 20:07 alin_qu 阅读(197) 评论(0) 推荐(0)
摘要:安装指定版本golang 环境变量 GOROOT golang安装路径 包含golang源码和它们的二进制文件 GOPATH 工作目录 查看安装之后的环境变量 root@ubuntu:~ go env GOPATH="" GOROOT="/usr/lib/go 1.6" 设置环境变量 mkdir p 阅读全文
posted @ 2018-03-10 18:10 alin_qu 阅读(1964) 评论(0) 推荐(1)
摘要:流程控制 for 只有这一种循环结构 初始化语句:在第一次迭代前执行 条件表达式:在每次迭代前求值 后置语句:在每次迭代的结尾执行 例子 sum := 0 for i:=0; i") return } fmt.Println(t.S) } func main(){ var i I var t T / 阅读全文
posted @ 2018-03-08 12:36 alin_qu 阅读(183) 评论(0) 推荐(0)
摘要:超卖问题:在一个很短的时间内,Mysql的数据状态在 取出,比较,提交,或修改中,另外一个进程访问数据导致的超卖问题。 案例: 1.前端没有做限制,如果用户连续点击签到,那么会有多条数据发送到后端,如果数据状态没有来得及完全修改过来,导致用户的签到数据被多次添加。 2.每天签到用户的前3名用户可以获 阅读全文
posted @ 2017-12-25 21:05 alin_qu 阅读(1257) 评论(0) 推荐(0)