03 2013 档案

摘要:刚开始接触golang,可能对interface的使用有些迷惑,尤其在有些资料里,介绍得更是云里雾里,让人搞不清楚。本文尝试从类型转换的角度来解析interface,希望对大家能有所帮助。不多说,先上代码。package mainimport ( "fmt")func main() { var general interface{} general = 6.6 type_cast(general) general = 2 type_cast(general)}func type_cast(general interface{}) { switch ge... 阅读全文
posted @ 2013-03-30 17:45 格通 阅读(10354) 评论(0) 推荐(0) 编辑
摘要:golang中有2种方式同步程序,一种使用channel,另一种使用锁机制。使用channel的案例可以参考我的博客:golang--使用channel来同步goroutine,这里要涉及的是锁机制,更具体的是sync.WaitGroup,一种较为简单的同步方法集。sync.WaitGroup只有3个方法,Add(),Done(),Wait()。其中Done()是Add(-1)的别名。简单的来说,使用Add()添加计数,Done()减掉一个计数,计数不为0, 阻塞Wait()的运行。要注意的有一点。sync文档已经说明了的,The main goroutine calls Add to set 阅读全文
posted @ 2013-03-29 14:12 格通 阅读(16541) 评论(0) 推荐(2) 编辑
摘要:在golang中,我们可以很轻易产生数以万计的goroutine,不过这也带来了麻烦:在运行中某一个goroutine异常退出,怎么办?在erlang中,有link原语,2个进程可以链接在一起,一个在异常退出的时候,向另一个进程呼喊崩溃的原因,然后由另一个进程处理这些信号,包括是否重启这个进程。在这方面,erlang的确做得很好,估计以后这个特性会在golang中得到实现。由此得到启发,我写了一个简单的程序,监控goroutine异常退出。package mainimport ( "log" "runtime" "math/rand" 阅读全文
posted @ 2013-03-29 13:23 格通 阅读(4047) 评论(0) 推荐(0) 编辑
摘要:在Hacker News看到用Go达到Zero-downtime restarts,意思大概为零下线时间式重启,很早就知道nginx可以轻松做到平滑重启,一直都想用go来实现这样的功能。看了一下它的代码实现,所以有了这篇博文。项目名字叫goagain,地址在:https://github.com/rcrowley/goagain。该项目是一个类库,也就是package,在go开发的程序中添加这个package就可以轻松地重启程序。goagain会监控2个系统信号,一个为SIGTERM,接收到这个信号,程序就停止运行。另一个信号为SIGUSR2,接收到这个信号的行为是,当前进程,也就是父进程会新 阅读全文
posted @ 2013-03-26 17:52 格通 阅读(1571) 评论(0) 推荐(0) 编辑
摘要:早就听说redis性能卓越,不过难以使用,但看了Hacker News的报道后,还是被它的难度吓倒了。原文标题:From 1.5 GB to 50 MB: The Story of My Redis Database,链接在这里:http://davidcel.is/blog/2013/03/20/the-story-of-my-redis-database/文章的内容简单的来说(英文水平不够,有错莫怪),刚开始,由于设计不好,redis的内存使用达到了1.5GB,服务器出现崩溃的问题。开始优化,把类似recommendable:users:1234:liked_beers这样的长组合健简化为 阅读全文
posted @ 2013-03-22 08:14 格通 阅读(1323) 评论(0) 推荐(0) 编辑
摘要:用Erlang开发web,很可能就会使用到mochiweb。mochiweb使用16个Erlang式的进程来监听tcp链接,使得任何链接进来都会很快得到处理。Golang跟Erlang很像,在这里实现了一个类似mochiweb的tcp监控链接,一个简单的echo服务器。先看代码。 1 package main 2 3 import ( 4 "log" 5 "runtime" 6 "net" 7 ) 8 9 func main() {10 11 tcpAddr, err := net.ResolveTCPAddr("tcp&q 阅读全文
posted @ 2013-03-20 09:07 格通 阅读(2178) 评论(0) 推荐(0) 编辑
摘要:在golang中同步goroutine有2种方法,要么使用channel,要么使用sync.WaitGroup,本文就是介绍如何通过channel来同步goroutine。先看代码。 1 package main 2 3 import ( 4 "os" 5 "os/signal" 6 "runtime" 7 "log" 8 "syscall" 9 )10 11 const NUM_OF_QUIT int = 10012 13 func main() {14 runtime.GOMAXPROCS( 阅读全文
posted @ 2013-03-19 21:41 格通 阅读(5685) 评论(0) 推荐(0) 编辑