代码改变世界

随笔分类 -  Go

go的websocket实现

2013-02-18 09:35 by 轩脉刃, 29168 阅读, 收藏, 编辑
摘要: websocket分为握手和数据传输阶段,即进行了HTTP握手 + 双工的TCP连接 RFC协议文档在:http://tools.ietf.org/html/rfc6455 握手阶段 握手阶段就是普通的HTTP 客户端发送消息: GET /chat HTTP/1.1 Host: server.example.com Upgrade: websocket ... 阅读全文

Go知识点记录

2013-02-06 11:21 by 轩脉刃, 4609 阅读, 收藏, 编辑
摘要: import包命名 import的包可以给它命名 import l4g "code.google.com/p/log4go" testing的Error和Fatal的区别 Error : Log() + Fail() 即记录当前错误,记录为失败,但是继续执行 Fatal : Log() + FailNow() 即记录当前错误,记录为失败,不继续执行 path.Clean使用 pat... 阅读全文

golang一个例子引出的几个问题

2013-01-30 10:39 by 轩脉刃, 6372 阅读, 收藏, 编辑
摘要: 这个例子是从go源码src/pkg/net/rpc/server_test.go截取出来的func benchmarkEndToEndAsync(dial func() (*Client, error), b *testing.B) { const MaxConcurrentCalls = 100 b.StopTimer() once.Do(startServer) client, err := dial() if err != nil { b.Fatal("error dialing:", err) } // Asyn... 阅读全文

go的sql包

2013-01-23 09:55 by 轩脉刃, 7416 阅读, 收藏, 编辑
摘要: go的sql包是在pkg/database中,里面的两个包sql和sql/driver可以一起看。建议看这个两个包之前可以先看看sql文件夹下的doc.txt。这个文档说了几点比较重要的: 1 这两个包是真正Go风格的包。 2 这使用这两个包就不需要关于并发处理了,也不需要维护自己的数据库连接池了,一旦建立了一个连接,这个连接是可以在各个goroutine之间共用的。 3 sql/drive... 阅读全文

golang test说明解读

2013-01-22 10:26 by 轩脉刃, 13540 阅读, 收藏, 编辑
摘要: go test是go语言自带的测试工具,其中包含的是两类,单元测试和性能测试 通过go help test可以看到go test的使用说明: 格式形如: go test [-c] [-i] [build flags] [packages] [flags for test binary] 参数解读: -c : 编译go test成为可执行的二进制文件,但是不运行测试。 -i : 安装测试... 阅读全文

mymysql与go-mysql-driver性能比较

2013-01-21 09:35 by 轩脉刃, 12946 阅读, 收藏, 编辑
摘要: mymysql和go-mysql-driver是两个现在都很流行的go的mysql驱动,这篇文章目的是要将这两个驱动进行一下比较 两个mysql驱动的下载地址: https://github.com/ziutek/mymysql http://code.google.com/p/go-mysql-driver/ 首先是性能测试 准备工作: 在mysql建表和初始化数据(db是test)... 阅读全文

golang test测试实例

2013-01-18 09:51 by 轩脉刃, 30350 阅读, 收藏, 编辑
摘要: 本文的目的是对mymysql进行单元测试和性能测试 准备工作: 1 go get github.com/ziutek/mymysql/thrsafe 2 在mysql建表和初始化数据(db是test) drop table if exists admin;CREATE TABLE `admin` ( `adminid` INT(10) UNSIGNED NOT NULL AUTO_I... 阅读全文

Plan9的C编译器

2013-01-16 09:26 by 轩脉刃, 4450 阅读, 收藏, 编辑
摘要: Plan9的C编译器有什么特别 对于分布式操作系统来说,需要能在那么多种CPU上进行运行,C编译器是尤其重要的。试想一下,如果你写了一个标准C的程序,需要在AMD64,ARM,Intel 86-32,MIPS,Motorola这么多CPU架构上都能运行,不是一个简单的事情。 plan9的C编译器要做的就是这么一个事情。How to Use Plan9 C Compiler http://doc... 阅读全文

go/src/make.bash阅读

2013-01-15 09:58 by 轩脉刃, 3379 阅读, 收藏, 编辑
摘要: 今天看到@polaris1119的这篇分析源码安装Go的过程(初稿)至今还没仔细看过make.bash的内容。这篇算是阅读笔记了。环境变量首先是make.bash中用到的环境变量:GOROOT_FINAL:Go源码的根目录,这个变量的是在gcc的时候使用的,如果你设置了这个,gcc的-D参数就是你设置的GOHOSTARCH:Go所在的宿主机器的架构,当然这里指的是CPU的架构GOARCH:安装包和工具所在的机器的架构。GOOS:安装包和工具所在的机器的操作系统。GO_GCFLAGS:是否要在编译的时候需要带上5g/6g/8g的参数GO_LDFLAGS:是否要在链接的时候带上5l/6l/8l的参 阅读全文

CPU知识

2013-01-14 11:47 by 轩脉刃, 2940 阅读, 收藏, 编辑
摘要: CPU的指令集是什么 指令集是底层软件与硬件交互的语言。一台计算机的全部指令称为该计算机的指令集。 现在的常见的指令集有: MIPS指令集 ARM指令集 Intel x86指令集 指令集有两种形式,一种是人类可以编程书写的形式(也就是平时所说的汇编语言),另一种是计算机所能识别的形式(就是汇编语言对应计算机的机器语言)。 下面是一个典型的MIPS汇编语言: add $s1,$... 阅读全文

Plan9操作系统基本概念

2013-01-07 16:38 by 轩脉刃, 11805 阅读, 收藏, 编辑
摘要: 什么是Plan 9Plan9 是一个操作系统。由贝尔实验室开发的,其主要的负责人是Rob Pike(现在在google工作,负责Go语言的开发)。当然这个操作系统的参与者还有几个大名鼎鼎的人:包括Ken Thompson(C语言和Unix创始人),Dennis Ritchie(C语言和Unix创始人),Brain Kernighan(awk之父),Doug Mcllroy(Unix管道提出者,Unix开发参与者)。为什么有了Unix还需要有Plan9呢?Plan9中最本质的思想是“一切皆是文件”,CPU是一个文件,内存是一个文件,网络是一个文件,任何的东西都是一个文件。Unix是一个多用户分时 阅读全文

Go的pprof使用

2012-12-27 11:07 by 轩脉刃, 91609 阅读, 收藏, 编辑
摘要: go中有pprof包来做代码的性能监控,在两个地方有包: net/http/pprof runtime/pprof 其实net/http/pprof中只是使用runtime/pprof包来进行封装了一下,并在http端口上暴露出来 pprof包 web 服务器 如果你的go程序是用http包启动的web服务器,你想查看自己的web服务器的状态。这个时候就可以选择net/http/ppr... 阅读全文

Go中的CGI包使用

2012-12-25 10:03 by 轩脉刃, 7270 阅读, 收藏, 编辑
摘要: Go中包含有CGI包,net/http/cgi,这篇文章就是来阅读和使用这个包。关于cgi的参数和运行,可以看这篇文章:CGI的一些知识点 CGI包阅读 cgi包的存在就告诉我们一件事情,cgi服务端和客户端完全可以使用Go来写 这个包其实很简单,只有两个文件,其他都是测试程序 child.go host.go host.go是可以直接宿主到go的web服务器上的代码,里面提供了... 阅读全文

go-tour源码阅读

2012-12-13 15:38 by 轩脉刃, 3175 阅读, 收藏, 编辑
摘要: go-tour是一个web项目,具有很强的可读性。 下面先看下里面的目录 appengine:这个包是当你想把go-tour布置到GAE上的时候使用的安装,我们这里只是使用本地安装,所以这里的代码可以不看 solutions:这个文件夹可以忽略,只是对文档中execise的答案,与go-tour网站无关 talks:这个是作者做的关于go-tour的演讲放在这里面,也可以直接忽略 sta... 阅读全文

Go中的闭包

2012-12-09 19:26 by 轩脉刃, 19869 阅读, 收藏, 编辑
摘要: 闭包是很多语言必备的功能了,golang也不例外。先看下面的这个例子:package mainimport "fmt"func adder() func(int) int { sum := 0 return func(x int) int { sum += x return sum }}func main() { pos, neg := adder(), adder() for i := 0; i < 10; i++ { fmt.Println( pos(i), ... 阅读全文

go-tour练习解答

2012-12-09 19:15 by 轩脉刃, 8830 阅读, 收藏, 编辑
摘要: go-tour对于想学习golang的人来说是一个很好的教程。首先go-tour是有web版本,但是需要FQ。如果不能FQ的,也可以在google code上自己下载go-tour源码,go build,run一下,在自己的机器上就可以跑这个教程了。提醒下,如果是后者,这篇文章中的程序对应的import包就需要进行相应修改了。下面给出我的go-tour中的Exercise的解答(在web上已经测试通过)Exercise: Loops and Functions第一个循环10次:package mainimport ( "fmt")func Sqrt(x float64) f 阅读全文

[阅读笔记]fsnotify源码阅读

2012-12-02 18:41 by 轩脉刃, 4008 阅读, 收藏, 编辑
摘要: fsnotify的github地址是https://github.com/howeyc/fsnotifyfsnotify是一个文件夹监控应用。可以使用创建一个watcher来对某个文件夹进行监控文件目录很简单,实际就两个程序文件,fsnotify.go 和 各平台的fsnotify_XXX.go后一个文件是各个不同平台的实现example_test.go中给的是最简单的实际应用先fsnotify.NewWatcher()再开一个goroutine监听文件夹修改的事件然后使用watcher.Watch()来监听一个文件夹fsnotify中的几个public函数Watch,WatchFlags,R 阅读全文

[阅读笔记]Go语言并发之美

2012-11-30 23:10 by 轩脉刃, 2942 阅读, 收藏, 编辑
摘要: 文章题目: Go语言并发之美文章链接: http://qing.weibo.com/2294942122/88ca09aa33002ele.html分享笔记: 这篇文章说的是go routine和channel在Go语言中的应用。刚开始看的时候,对文章使用lua的协程来描述goroutine还真是不习惯。建议读者不要跟者作者使用这样的称呼。并发在Go中得到语言级别的支持。文章列出了几个goroutine和channel的使用方法1 id生成器由于id生成器会产生系统调用,所以假设生成随机数这个id生成函数需要很长时间。这个时候就可以使用到并发了。当一个goroutine在运行的时候,另外一个i 阅读全文

Golang之继承模拟

2012-09-13 23:07 by 轩脉刃, 16434 阅读, 收藏, 编辑
摘要: 问题由一个需求引起: web的controller,希望创建一个基类,然后在子类的controller中定义action方法,基类有一个run函数能根据字符串自动找到子类的action方法。 如何解决呢? -- 用继承 示例分析继承 首先这个需求是很普遍的,由于脑中有继承概念,所以想当然地以为这个很容易实现: package mainimport( "reflect")type A struct {}func (self A)Run() { c := reflect.ValueOf(self) method := c.MethodByName("Test" 阅读全文

使用Golang 搭建http web服务器

2012-09-03 10:39 by 轩脉刃, 85800 阅读, 收藏, 编辑
摘要: Golang在搭建web服务器方面的能力是毋庸置疑的。官方已经有提供net/http包为搭建http服务器做准备。使用这个包能很简单地对web的路由,静态文件,模版,cookie等数据进行设置。至于这个包是否好用,这个就见仁见智了。你可以从net包开始封装一个web框架,当然也可以基于http包封装一个web框架。但是不论你是打算怎么样做,了解基本的net/http包一定是你借鉴的基础。 需求 ... 阅读全文