Thrift框架学习
摘要:参考文章:1、http://www.kankanews.com/ICkengine/archives/54084.shtml2、http://www.cnblogs.com/liping13599168/archive/2011/09/15/2176836.htmlGolang内置了对RPC支持,但只能适用于go语言程序之间调用。Thrift是一种可伸缩的跨语言服务框架,它支持C++,C#,Java,Python,Go等多种语言。thrift允许你定义一个简单的定义文件中的数据类型和服务接口,以作为输入文件,编译器生成代码用来方便地生成RPC客户端和服务器通信的无缝跨编程语言。这种方式与微软的
阅读全文
posted @
2014-01-16 10:42
顾文锦
阅读(2595)
推荐(0) 编辑
Revel框架学习
摘要:1、准备工作revel的下载需要git和hg(mercurial)工具,请先安装这两个工具。配置好GOROOT和GOPATH环境变量,源码会默认下载到GOPATH第一个目录的src目录下。一般go安装时会在环境变量PATH中添加GOROOT\bin路径,最好确认一下,方便以后在任意位置运行go命令。2、下载安装revel2.1参考之前的文章http://www.cnblogs.com/wenjingu/p/3229578.html第6条配置好获取远程包的环境,运行以下命令go get github.com/robfig/revel 下载revel包,2.2由于revel包引用了code.goo
阅读全文
posted @
2014-01-15 18:06
顾文锦
阅读(557)
推荐(0) 编辑
Go语言最佳实践—— 字符串
摘要:1、串联字符串Go语言虽然支持+=操作符来追加字符串,但更好的方式是使用bytes.Buffer,这种方式在节省内存和效率方面有更好的表现。如:var buffer bytes.Bufferbuffer.WriteString("this")buffer.WriteString(" is")buffer.WriteString(" a")buffer.WriteString(" test")fmt.Println(buffer.String())输出为:this is a test2、字符串索引对于只包含7位ASC
阅读全文
posted @
2014-01-10 11:26
顾文锦
阅读(359)
推荐(0) 编辑
Go语言最佳实践——异常和错误
摘要:Go语言将错误和异常两者区分对待。1、Go语言中处理错误的惯用法是将错误以函数或者方法最后一个返回值的形式将其返回,并总是在调用它的地方检查返回的错误值。2、对于“不可能发生的事情”称为异常,可使用panic()函数向调用栈传播异常。何时使用recover()捕捉异常,何时让panic()继续传播呢? 2.1 自定义的包,最好不使用panic()。如果要使用,应该使用recover()捕捉异常并转换为一个错误值返回; 2.2 准备部署或发布程序时,应该使用recover()捕捉异常并转换为一个错误值返回并记录; 2.3 开发阶段可以使用panic()函数中断程序的执行以强制发生错误,使得...
阅读全文
posted @
2014-01-10 11:10
顾文锦
阅读(595)
推荐(0) 编辑
Go语言最佳实践——通道和并发
摘要:何时关闭通道:第一,只有在后面要检查通道是否关闭的时候才需要显式地关闭通道;第二,应该由发送端的goroutine关闭通道,而不是由接收端的goroutine来完成;第三,如果通道并不需要检查是否被关闭,那么不关闭这些通道并没有什么问题,因为通道非常轻量,因此它不会像打开文件不关闭那样耗尽系统资源。两个陷阱:1、程序完成时我们没得到任何结果因为主gorouting退出后,其他的工作goroutine也会退出,所以必须保证所有工作goroutine都完成后才让主goroutine退出。2、死锁有两种情况下可能发生死锁:第一种是即使所有的工作都已经完成了,但是主goroutine和工作gorout
阅读全文
posted @
2014-01-10 10:31
顾文锦
阅读(532)
推荐(0) 编辑
Go语言最佳实践——面向对象
摘要:对于接口,应使用组合而非继承的方式扩展;对于结构体,应定义独立的结构体,而非用嵌套模拟继承。值接收者和指针接收者:1、对于不可变类型创建只接受值接收者的方法,而为可变的类型创建接受指针接收者的方法。(对于可变类型,让部分方法接受值而让其他方法接受指针式完全可行的,但是使用中可能不太方便。)2、对于大的结构体类型最好使用指针,这样能将开销保持在只传递一个指针的程度。
阅读全文
posted @
2014-01-10 10:26
顾文锦
阅读(254)
推荐(0) 编辑
对闭包的理解
摘要:“闭包”这个概念一般用在两种毫不相干的场景中:第一种:在抽象代数里,一集元素称为在某个运算(操作)之下封闭,如果将该运算应用于这一集合中的元素,产生出的仍然是该集合里的元素。如Scheme语言中的cons过程具有该性质。第二种:百度解释:闭包是可以包含自由(未绑定到特定对象)变量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)...在编程领域我们可以通俗的说:子函数可以使用父函数中的局部变量,这种行为就叫做闭包!比如Go语言中的闭包。网上一般认为第二种说法更确切,这种观点的出发点是:第一种观点认为“闭包是符合一定条件的函数”,本人认为该观
阅读全文
posted @
2014-01-06 17:23
顾文锦
阅读(332)
推荐(0) 编辑