07 2017 档案
golang 实现延迟消息原理与方法
摘要:实现延迟消息具体思路我是看的下面这篇文章 实现延迟消息最主要的两个结构: 环形队列:通过golang中的数组实现,分成3600个slot。 任务集合:通过map[key]*Task,每个slot一个map,map的值就是我们要执行的任务。 原理图如下: 实现代码如下: 测试结果如下: 阅读全文
posted @ 2017-07-26 14:15 怀素真 阅读(6002) 评论(0) 推荐(0) 编辑
golang 创建一个简单的连接池,减少频繁的创建与关闭
摘要:一、连接池的描述图片如下: 二、连接池代码如下: 三、8080服务端代码如下: 测试结果如下: 阅读全文
posted @ 2017-07-25 17:12 怀素真 阅读(7923) 评论(1) 推荐(0) 编辑
golang 创建一个简单的资源池,重用资源,减少GC负担
摘要:package main; import ( "sync" "errors" "fmt" ) //代码参考《Go语言实战》中第7章并发模式Pool //如果哪个类型实现了Resource接口中的两个方法,我们就认为该类型是资源 type Resource interface { Close(); IsClosed() bool; } //工厂方法,用于创建新资源 type Fa... 阅读全文
posted @ 2017-07-24 17:35 怀素真 阅读(1223) 评论(0) 推荐(0) 编辑
golang sync.Pool包的使用和一些注意地方
摘要:package main; import ( "sync" "fmt" "net" "runtime" ) //sync.Pool是一个可以存或取的临时对象集合 //sync.Pool可以安全被多个线程同时使用,保证线程安全 //注意、注意、注意,sync.Pool中保存的任何项都可能随时不做通知的 阅读全文
posted @ 2017-07-24 11:57 怀素真 阅读(5845) 评论(0) 推荐(0) 编辑
golang语言中bytes包的常用函数,Reader和Buffer的使用
摘要:bytes中常用函数的使用: bytes中Reader和Buffer的使用: 阅读全文
posted @ 2017-07-22 15:47 怀素真 阅读(14568) 评论(0) 推荐(0) 编辑
golang语言中sync/atomic包的学习与使用
摘要:package main; import ( "sync/atomic" "fmt" "sync" ) //atomic包提供了底层的原子级内存操作 //类型共有六种:int32, int64, uint32, uint64, uintptr, unsafe.Pinter //操作共五种:增减, 比较并交换, 载入, 存储,交换 func main() { //增减操作 var... 阅读全文
posted @ 2017-07-22 11:04 怀素真 阅读(6567) 评论(0) 推荐(0) 编辑
golang 简单的实现内 网 穿 透,用户访问本地服务。
摘要:一、功能描述: 客户端通过访问外网服务器上指定端口,间接访问自已本地的内网服务。 二、原理图如下: 三、实现代码如下: server.go代码: client.go代码: 四、测试 1、先把server.go上传到外网服务器上,安装GO环境,并编译,然后运行server 2、在本地编译client. 阅读全文
posted @ 2017-07-21 17:05 怀素真 阅读(2920) 评论(0) 推荐(0) 编辑
golang 创建一个简单的广播echo服务器
摘要:package main; import ( "net" "fmt" "bufio" ) //里面的代码部分参考cmu440课程 //https://github.com/cmu440/p0 //广播服务器接口 type MultiEchoServer interface { //开始 Start( 阅读全文
posted @ 2017-07-20 11:14 怀素真 阅读(1140) 评论(0) 推荐(0) 编辑
golang 使用 protobuf 的教程
摘要:1、下载protobuf的编译器protoc 地址: window: 下载: protoc-3.3.0-win32.zip 解压,把bin目录下的protoc.exe复制到GOPATH/bin下,GOPATH/bin加入环境变量。 当然也可放在其他目录,需加入环境变量,能让系统找到protoc.ex 阅读全文
posted @ 2017-07-13 17:50 怀素真 阅读(37619) 评论(1) 推荐(2) 编辑
golang语言中os包的学习与使用(文件,目录,进程的操作)
摘要:os中一些常用函数的使用: os中一些常用文件函数的使用: os中关于进程的操作: 阅读全文
posted @ 2017-07-10 16:31 怀素真 阅读(6072) 评论(0) 推荐(1) 编辑
golang语言中os/user包的学习与使用
摘要:package main; import ( "os/user" "fmt" ) func main() { //返回当前用户的结构 u, _ := user.Current(); fmt.Println(u.Name); //用户主目录 fmt.Println(u.HomeDir); //用户名 阅读全文
posted @ 2017-07-10 13:44 怀素真 阅读(513) 评论(0) 推荐(0) 编辑
golang语言中os/signal包的学习与使用
摘要:package main; import ( "os" "os/signal" "fmt" ) //signal包中提供了两个函数 //Notifyf()用于监听信号 //Stop()用于停止监听 func main() { ch := make(chan os.Signal); //notify用于监听信号 //参数1表示接收信号的channel //参数2及后面的表示要... 阅读全文
posted @ 2017-07-10 12:31 怀素真 阅读(980) 评论(1) 推荐(1) 编辑
golang语言中os/exec包的学习与使用
摘要:package main; import ( "os/exec" "fmt" "io/ioutil" "bytes" ) func main() { //在环境变量path中查找可执行二进制文件 //返回完整路径或者相对于当前目录的一个相对路径 file, _ := exec.LookPath("go"); fmt.Println(file); //返回一个cmd cm... 阅读全文
posted @ 2017-07-10 11:29 怀素真 阅读(1117) 评论(0) 推荐(0) 编辑