GO学习
阿冬哥
这个作者很懒,什么都没留下…
展开
-
GO 语言websocket编程
GO提供原生的websocket API,使用时go get然后引用即可 golang.org/x/net/websocket 使用起来也很方便,直接上代码吧。一个echo server的代码package mainimport( "golang.org/x/net/websocket" "fmt" "net/http" "flag")type WSServer原创 2017-12-19 18:18:52 · 8420 阅读 · 2 评论 -
select case break引发的血案
最近线上一个模块有内存泄漏,加了http pprof后,发现goroutine一直在增长,怀疑是goroutine泄漏导致的内存泄漏。于是死看代码,发现以下代码片段可能存在问题://goroutine...for{ select { case ... ... case ... ... case原创 2018-03-20 13:15:57 · 8080 阅读 · 3 评论 -
GO通道chan
chan用于goroutine间的通信1、基础有缓冲通道和无缓冲通道无缓冲通道:make(chan int) 有缓冲通道:make(chan int, 5)无缓冲通道会导致发送和接收的goroutine同步化主要体现在如下两点: - 无缓冲通道会使发送goroutine阻塞,直到对应的chan上有接收者package mainimport (原创 2017-12-12 20:31:41 · 945 阅读 · 0 评论 -
6位全局唯一随机邀请码实现方式
很多APP都会为每一个用户生成一个邀请码,用以奖励用户邀请其他人下载注册使用该APP。例如之前的Uber邀请码、现在的西瓜视频邀请码、各种虚拟货币邀请码等等。这些邀请码多是5位或者6位数字和字母的组合,实现中,每一个用户固定一个邀请码,也就是说邀请码全局唯一。且邀请码没有特定的规律,看上去是随机生成的。那么这些邀请码具体是怎么实现的?邀请码实现方式我没有做过邀请码类似项目,所以我能想到原创 2018-01-11 15:35:55 · 39503 阅读 · 9 评论 -
GO语言TCP编程范式
GO语言TCP服务端、客户端编程实例原创 2018-01-02 20:44:11 · 648 阅读 · 0 评论 -
不要通过共享内存来通信,要通过通信来共享内存
“不要通过共享内存来通信,要通过通信来共享内存”,这句话是GO社区中非常经典的一句话,但是我们如何理解这句话呢? GO语言的协程(goroutine)是从进程、线程基础上发展而来的,它比进程线程更轻量级,但是都是为并发而生。既然是并发,那么不可避免的会有多个不同并发实体之间传播或者交换信息,也即通信。要理解“不要通过共享内存来通信,要通过通信来共享内存”这句话,我们得从跟进程线程间通信的比较来了解原创 2017-12-12 19:29:43 · 5621 阅读 · 2 评论 -
命令行解析:flag
一般使用在写命令行程序(工具、server)时,对命令参数进行解析是常见的需求。Go的命令行参数解析通过flag包实现,先看下面这个例子,假设我们实现了一个server,启动这个server的时候需要指定监听的tcp地址(例如:127.0.0.1:1314)、配置文件、监听的http地址(例如:127.0.0.1:6666)。启动命令如下: ./server -tcpAddr 127.0.0.1原创 2017-12-12 19:27:01 · 1930 阅读 · 0 评论 -
切片(slice)
切片是动态数组,比数组灵活。数组长度不可变,但是切片可以追加。 切片原型定义如下:struct Slice{ byte *array; unit32 len; unit32 cap;};它抽象为以下三个部分: 1. 指向被引用的底层数组的指针; 2. 切片中元素的个数; 3. 切片分配的存储空间。声明、定义和初始化声明一个切片:var sliceTest []int声明的切片原创 2017-12-12 19:24:37 · 974 阅读 · 0 评论 -
map
GO语言 map原创 2017-12-12 19:22:43 · 189 阅读 · 0 评论