
golang
文章平均质量分 79
aslackers
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
nsq源码阅读 nsqlookupd源码一 nsqlookupd.go
查看nsq的几个模块,发现nsqlookupd模块的代码量最少,所以从它开始。从nsqlookupd/nsqlookupd.go文件开始:package nsqlookupdimport ( "fmt" "log" "net" "os" "sync" "github.com/nsqio/nsq/internal/http_api" "github.com/nsqio/n原创 2017-03-23 10:17:50 · 759 阅读 · 0 评论 -
golang中json与struct中tag简介
使用Golang 的 encoding/json 库已经提供了很好的封装,可以让我们很方便地进行 JSON 数据的转换。Go 语言中数据结构和 JSON 类型的对应关系如下表:golang 类型JSON 类型注意事项boolJSON booleans 浮点数、整数JSON numbers 字转载 2018-02-02 14:03:10 · 20347 阅读 · 0 评论 -
go语言的字节序
最近在看nsq的源码时候,发现它处理message的时候,都会采用字节序进行数据包的处理,于是我觉得有必要深入了解下TCP协议中 字节序的知识字节序(Byte Order)我们一般把字节(byte)看作是数据的最小单位。当然,其实一个字节中还包含8个bit (bit = binary digit)。 在一个32位的CPU中“字长”为32个bit,也就是4个byte。在这样的CP转载 2017-12-07 16:05:53 · 9830 阅读 · 2 评论 -
nsq源码阅读 nsqd源码三 tcp.go
NSQ的TCP逻辑都是这样的,调用internal/protocol/tcp_server.go中的TCPServer:func TCPServer(listener net.Listener, handler TCPHandler, l app.Logger)接受客户端连接,在这里客户端为consumer,调用TCPHandler.Handle处理业务逻辑,TCPHandler.Ha原创 2017-11-21 18:28:09 · 796 阅读 · 0 评论 -
golang随机数生成——关于rand.Seed的一点记录
Golang随机数生成注意事项记录。原创 2017-11-16 11:23:10 · 34013 阅读 · 1 评论 -
Golang实战-一个聊天室的实现
《Go语言程序设计》中第8.10节有个聊天室的例子,我们就来跟着完成这个例子。不用使用任何第三方包,基于命令行,方便学习。原创 2017-05-18 15:36:48 · 8926 阅读 · 2 评论 -
nsq源码阅读 nsqd源码二 nsqd/nsqd.go
查看nsqd模块的入口文件apps/nsqd/nsqd.go可知,nsqd模块从开始到结束经历了5步:1、初始化nsqd实例nsqd.New();2、读取元数据nsqd.LoadMetadata();3、保存元数据nsqd.PersistMetadata();4、主方法nsqd.Main();5、程序终止nsqd.Exit()初始化初始化时设置了--data-p原创 2017-06-01 17:14:20 · 659 阅读 · 0 评论 -
nsq源码阅读 nsqlookupd源码五 http.go http_server.go
再来看看关于HTTP的处理逻辑:httpServer := newHTTPServer(ctx)新建HTTP实例,跟踪代码,nsqlookupd/http.go:package nsqlookupdimport ( "fmt" "net/http" "net/http/pprof" "sync/atomic" "github.com/julienschmidt/原创 2017-05-16 14:41:35 · 902 阅读 · 0 评论 -
nsq源码阅读 nsqd源码一 apps/nsqd/nsqd.go
之前已经将NSQ的nsqlookupd模块源码大致的看了一遍了,现在开始阅读nsqd模块的源码。作为NSQ的核心模块,代码量也相对多点。废话不多说,开始读代码。首先从mai()方法开始:func main() { prg := &program{} if err := svc.Run(prg, syscall.SIGINT, syscall.SIGTERM); err != nil {原创 2017-05-24 18:19:53 · 1623 阅读 · 0 评论 -
Golang实战-一个聊天室的实现二
在上一篇《Golang实战-一个聊天室的实现》中,我们按照书上写了个简单的聊天室,今天我们来加点我们自己的东西:可新增房间,并切换房间。要想新建房间,得有个房间的对象,保存房间的一些基本信息:type RoomInfo struct { Name string `json:"name"` //删除房间时用,只有房间创建者可删除 CreaterId strin原创 2017-05-23 17:25:25 · 1641 阅读 · 0 评论 -
nsq源码阅读 nsqlookupd源码四 lookup_protocol_v1.go
阅读nsqlookupd/tcp.go源码时,有一段代码:err = prot.IOLoop(clientConn)对TCP数据处理的核心逻辑,对应的代码就是nsqlookupd/lookup_protocol_v1.go,现在来阅读这里的代码:package nsqlookupdimport ( "bufio" "encoding/binary" "encoding原创 2017-05-03 17:36:58 · 890 阅读 · 0 评论 -
nsq源码阅读 nsqlookupd源码三 tcp.go tcp_server.go
nsqlookupd.go中对TCP的处理代码为protocol.TCPServer(tcpListener, tcpServer, l.opts.Logger)用户监听处理nsqd发送的信息TCPServer在internal/protocol/tcp_server.go中定义:package protocolimport ( "fmt" "net" "runt原创 2017-05-02 16:26:03 · 515 阅读 · 0 评论 -
nsq源码阅读 nsqlookupd源码二 registration_db.go
RegistrationDB,字面意思:注册数据库,保存nsqd的注册信息,这里提供一系列增、删、改、查的操作封装原创 2017-05-02 14:29:38 · 779 阅读 · 0 评论 -
golang实战--实现短地址服务
golang写的简单的短地址服务,只做练手用,还有很多不完善的地方TODO:验证URL的有效性;确认URL的协议(http、https)数据库操作优化现在的路由太简单了下面贴上代码package mainimport ( "database/sql" "fmt" "net/http" "io/ioutil" "encoding/json" _ "原创 2017-04-11 15:40:02 · 2917 阅读 · 0 评论 -
golang线程同步WaitGroup简介
WaitGroup用于线程同步,WaitGroup等待一组线程集合完成,才会继续向下执行。 主线程(goroutine)调用Add来设置等待的线程(goroutine)数量。 然后每个线程(goroutine)运行,并在完成后调用Done。 同时,Wait用来阻塞,直到所有线程(goroutine)完成才会向下执行。对官方的代码做简单修改:package mainimport ( "原创 2017-03-14 18:00:59 · 45630 阅读 · 0 评论 -
golang读写锁RWMutex
读写锁是针对读写的互斥锁基本遵循两大原则:1、可以随便读,多个goroutine同时读2、写的时候,啥也不能干。不能读也不能写RWMutex提供了四个方法:func (*RWMutex) Lock // 写锁定func (*RWMutex) Unlock // 写解锁func (*RWMutex) RLock // 读锁定func (转载 2017-03-14 16:15:50 · 1611 阅读 · 0 评论 -
nsq源码阅读 nsqd源码四 nsqd/lookup.go 与nsqlookupd服务的交互
NSQD对象的Main()方法中有一段代码:n.waitGroup.Wrap(func() { n.lookupLoop() })启动一个goroutine,处理与nsqlookupd进程的交互。封装在nsqd/lookup.go中。这个goroutine的主要功能有:1、连接nsqlookupd服务,执行IDENTIFY操作;2、将nsqd的Metadata中的topic、channel注册到n...原创 2018-02-08 17:08:38 · 742 阅读 · 0 评论