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