
golang
白日梦想
这个作者很懒,什么都没留下…
展开
-
golang捕获ctrl+c退出程序
在golang当中如何捕获ctrl+c命令,让程序有序的的退出?首先测试一段golang代码,捕获SIGINT和SIGKILLc := make(chan os.Signal, 1)signal.Notify(c, os.Interrupt, os.Kill)s := <-cfmt.Println("Got signal:", s)在多goroutines当中如何退出?我们假设有一个生产者,一个原创 2016-03-03 21:11:53 · 5857 阅读 · 0 评论 -
golang的filepath包函数示例
func Abs(path string) (string, error)package mainimport ( "path/filepath" "os" "fmt")func main() { // pName := os.Args[0] absName, err := filepath.Abs(pName) if err != nil原创 2016-10-10 22:05:46 · 1577 阅读 · 0 评论 -
golang实现的http反向代理
今天找http代理的例子,一直没找到满意的,终于在github上找到一个,非常的简洁,记录一下。package mainimport ( "net/http" "net/http/httputil" "log")func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request原创 2016-10-10 22:04:15 · 1647 阅读 · 0 评论 -
golang中调用C
golang中调用C原创 2016-03-09 14:47:59 · 2527 阅读 · 0 评论 -
golang捕获panic
golang当中panic的时候如果启动的goroutine比较多,刷的信息满屏都是,在终端工具上因为刷的信息太多,找不到前边的信息,因此很有必要程序自己捕获panic,并且将错误信息输出到文件当中,以便定位排查问题。以下是一段捕获panic的代码package mainimport ( "fmt" "os" "runtime/debug" "time")func原创 2016-02-28 21:40:10 · 5429 阅读 · 0 评论 -
golang工作者goroutine池模型
在golang编写服务程序过程中,如果每次来斗启动一个goroutine去处理任务,处理一个任务后就退出,这样势必会造成资源浪费。构建一个工作goroutine池来处理任务相对资源利用会少些,具体的情况需对比测试。列表内容type WorkerPool struct { tasks <-chan *string //任务队列长度 poolSize int原创 2016-02-27 09:48:07 · 2889 阅读 · 0 评论 -
golang实现抽象工厂模式
在项目过程中,遇到某处需要使用工厂模式,因此写了个测试代码进行测试,首先定义了interface Worker,其中包含一个接口Work(task *string)然后定义创建Worker的interface WorkerCreator,包含一个接口Create() ,返回值为Workertype Worker interface { Work(task *string)}type原创 2016-02-26 14:43:05 · 2138 阅读 · 0 评论 -
golang中函数闭包遇到的坑
golang项目中用到kafka,有个组件需要拉取消息;这个组件启动是成功的,有的时候能拉取消息;有的时候感觉像卡死了一样,有消息了,一条都没有拉取到。kafka测试没问题;最后定位到,原来是函数闭包用的有问题。看下面这段代码,看起来似乎是两个goroutine,我们把rId作为goroutine的标记,结果想象应该是:1 abcdef0 1234560 1234561 abcdef1 ab原创 2016-03-09 14:43:42 · 1471 阅读 · 0 评论 -
golang解析json格式
golang解析json格式项目中客户端和服务端的交互数据部分为json,因此在服务端就得解析,复杂的json解析起来其实还是挺费劲的。 交互的数据类似如下格式:{"sn":1,"ls":false,"bg":0,"ed":0,"ws":[{"bg":0,"cw":[{"sc":0,"w":"还"}]},{"bg":0,"cw":[{"sc":0,"w":"有点"}]},{"bg":0,"cw":原创 2016-02-19 22:48:51 · 5249 阅读 · 0 评论 -
golang中strings包函数示例
func Compare(a, b string) intpackage mainimport ( "fmt" "strings")func main() { fmt.Println(strings.Compare("123","123")) fmt.Println(strings.Compare("123","456")) fmt.Println(stri原创 2016-10-13 15:30:53 · 808 阅读 · 0 评论