NSQ:golang-NSQ源码阅读 1-NSQ基本信息 | KaiQ.Gu|KerwinKoo Blog

作者:JerryXia | 发表于 , 阅读 (0)
关于本文本文建立在通过解读NSQ源码来提升golang的编写能力。
对于阅读某个项目的源码,本人通常按以下流程开展:
充分理解项目的使用场景和功能;对比其在同类项目中的优缺点;大体构思实现该项目需要什么模块;阅读源码。当然过程不是一成不变的,对项目的理解起初往往是从外界获取,在阅读源码的过程中会有一些自己的理解融汇进去;同时源码也不是一遍就可以看明白的,这个过程需要反复折回。
在本文中,分析对象是以golang为主编程语言而开发的Message Queue:NSQ,通过上面提到的过程来进行剖析。网上已有不少NSQ的说明及代码解释文档,我会对其进行参考,也会将参考源地址做好引用。
what’s MQ关于MQ的解释google就可以找出很多,根据使用场景和经历不同,对MQ的理解不同。我之前项目中使用MQ场景比较简单,就是接收日志,并且没有用到多节点拓扑功能。简单理解一下,应该是有一个http的writer的端,一个内部的reader端。客户端将日志上传到writer之后无需等待服务器处理,直接收到一个成功反馈,服务端在空闲时读取reader端,将队列中的日志进行处理的一种生产者-消...阅读全文

golang传参方式 | KaiQ.Gu|KerwinKoo Blog

作者:JerryXia | 发表于 , 阅读 (0)
golang 参数传值首先,golang官方表示golang的函数调用参数均为值传递,不是指针传递或引用传递。经测试引申出来,当参数变量为指针或隐式指针类型,参数传递方式也是传值(指针本身的copy)。
after they are evaluated, the parameters of the call are passed by value to thefunction and the called function begins execution.解释关于最有争议的slice传参是传值还是传引用(或指针)的问题,做一个剖析。
首先,认为slice传参是引用传递的大都是根据以下代码情况得出的结果:
123456789101112131415package mainimport "fmt"func main(){    slice := make([]int, 3, 5)    fmt.Println("before:", slice)    changeSliceMember(slice)    fmt.Println("after:", slice)}func chan...阅读全文

golang Try重试机制解读 | KaiQ.Gu|KerwinKoo Blog

作者:JerryXia | 发表于 , 阅读 (0)
golang-trygolang官方没有try关键字做代码尝试执行,但github中有人为其做了个try功能的语法糖。
try用法举例1234567891011121314151617181920212223242526272829303132333435363738package mainimport ( "errors" "fmt" "github.com/matryer/try" "math/rand" "time")func main() { var value string err := try.Do(func(attempt int) (bool, error) { var err error value, err = randomFunc() if err != nil { fmt.Println("run error:", err) } else { fmt.Println("run ok:", value) } return attempt < 5, err //设置尝试次数,即尝试5次 }) if err != nil { fmt.Print...阅读全文

图片云存储功能比较 | KaiQ.Gu|KerwinKoo Blog

作者:JerryXia | 发表于 , 阅读 (0)
举例图片指定宽高缩略原图片http地址+@+w宽度+h高度+缩略参照边+缩略后生成的格式e.g.:假如原图片地址为:
http://img.oss-demo.com/example.jpg原图片的大小为w=200, h=400,即一个长边为400(h高)短边为200(w宽)的jpg图片,需要缩放为100×100的图片,如果选择长边优先,则缩放的结果为50×100,即长边(h高)由400缩成需要的100, 而宽度则根据原图片1:2的比例,缩成了50。其缩略结果获取地址为:
http://img.oss-demo.com/example.jpg@100h_100w_0e其中,@后为参数设置,参数e来代表缩略方式,0e是指定长边为缩略参照边,如果需要短边参照,则改为1e即可,而2e则代表强制宽高缩略。
补充功能上面的例子可以通过增加其他参数,来同时获取修改结果。如下面地址:
http://img.oss-demo.com/example.jpg@100w_100h_1e_90q_180r.png其作用是,对原图片以短边为缩略参照边,进行100×100缩略(结果是100×200,使用参...阅读全文

开源wiki系统:gollum | KaiQ.Gu|KerwinKoo Blog

作者:JerryXia | 发表于 , 阅读 (0)
安装及设置按照github官网中的方法安装即可,安装过程中的个人经验做下总结。
注意问题在安装之后,如果将现有markdown文件放入wiki目录下,再启动gollum是不会显示新文件的,因为该文件没有加入git。
官网的解释原文是:
Navigate to your git repository (wiki) via the command line.即必须有git。
格式优化单启动gollum只会启动wiki的最基本服务,通过以下办法可以增加新的插件。
侧边栏显示该文件的目录在wiki的git主目录下新建文件 _Sidebar.md,将目录显示宏写入文件内保存:
1{[_TOC_]] #将第一个{改为[由于此文章本身是在wiki中编写,因此不能写入此宏代码,需要将左边第一个"{"符号改为"["。
重启gollum即可
增加主页全文件目录新建Home.md后,在此文件中写入以下(不要复制注释):
1{<GlobalTOC()>> #将左边第一个{改为<同理,需要将左边第一个{改为<
创建文件目录在点击new创建新文件后,在文件名中增加/来创建新的目录。如创建目录t...阅读全文