2014年1月10日
摘要: Go语言将错误和异常两者区分对待。1、Go语言中处理错误的惯用法是将错误以函数或者方法最后一个返回值的形式将其返回,并总是在调用它的地方检查返回的错误值。2、对于“不可能发生的事情”称为异常,可使用panic()函数向调用栈传播异常。何时使用recover()捕捉异常,何时让panic()继续传播呢? 2.1 自定义的包,最好不使用panic()。如果要使用,应该使用recover()捕捉异常并转换为一个错误值返回; 2.2 准备部署或发布程序时,应该使用recover()捕捉异常并转换为一个错误值返回并记录; 2.3 开发阶段可以使用panic()函数中断程序的执行以强制发生错误,使得... 阅读全文
posted @ 2014-01-10 11:10 顾文锦 阅读(592) 评论(0) 推荐(0) 编辑
摘要: 何时关闭通道:第一,只有在后面要检查通道是否关闭的时候才需要显式地关闭通道;第二,应该由发送端的goroutine关闭通道,而不是由接收端的goroutine来完成;第三,如果通道并不需要检查是否被关闭,那么不关闭这些通道并没有什么问题,因为通道非常轻量,因此它不会像打开文件不关闭那样耗尽系统资源。两个陷阱:1、程序完成时我们没得到任何结果因为主gorouting退出后,其他的工作goroutine也会退出,所以必须保证所有工作goroutine都完成后才让主goroutine退出。2、死锁有两种情况下可能发生死锁:第一种是即使所有的工作都已经完成了,但是主goroutine和工作gorout 阅读全文
posted @ 2014-01-10 10:31 顾文锦 阅读(531) 评论(0) 推荐(0) 编辑
摘要: 对于接口,应使用组合而非继承的方式扩展;对于结构体,应定义独立的结构体,而非用嵌套模拟继承。值接收者和指针接收者:1、对于不可变类型创建只接受值接收者的方法,而为可变的类型创建接受指针接收者的方法。(对于可变类型,让部分方法接受值而让其他方法接受指针式完全可行的,但是使用中可能不太方便。)2、对于大的结构体类型最好使用指针,这样能将开销保持在只传递一个指针的程度。 阅读全文
posted @ 2014-01-10 10:26 顾文锦 阅读(252) 评论(0) 推荐(0) 编辑
  2014年1月6日
摘要: “闭包”这个概念一般用在两种毫不相干的场景中:第一种:在抽象代数里,一集元素称为在某个运算(操作)之下封闭,如果将该运算应用于这一集合中的元素,产生出的仍然是该集合里的元素。如Scheme语言中的cons过程具有该性质。第二种:百度解释:闭包是可以包含自由(未绑定到特定对象)变量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)...在编程领域我们可以通俗的说:子函数可以使用父函数中的局部变量,这种行为就叫做闭包!比如Go语言中的闭包。网上一般认为第二种说法更确切,这种观点的出发点是:第一种观点认为“闭包是符合一定条件的函数”,本人认为该观 阅读全文
posted @ 2014-01-06 17:23 顾文锦 阅读(329) 评论(0) 推荐(0) 编辑
  2013年12月20日
摘要: 在网上看到一篇非常好的文章http://www.zhihu.com/question/21615032,转载如下:go的gc还不完善但也不算不靠谱,关键看怎么用,尽量不要创建大量对象,也尽量不要频繁创建对象,这个道理其实在所有带gc的编程语言也都通用。想知道如何提前预防和解决问题的,请耐心看下去。先介绍下我的情况,我们团队的项目《仙侠道》在7月15号第一次接受玩家测试,这个项目的服务端完全用Go语言开发的,游戏数据都放在内存中由go 管理。在上线测试后我对程序做了很多调优工作,最初是稳定性优先,所以先解决的是内存泄漏问题,主要靠memprof来定位问题,接着是进一步提高性能,主要靠cpupro 阅读全文
posted @ 2013-12-20 13:58 顾文锦 阅读(1149) 评论(0) 推荐(1) 编辑
  2013年8月7日
摘要: 安装 Mono for Android for Visual Studio 2010 需要下面4个步骤:1、安装 JDK 下载并安装Java 1.6 (Java 6) JDK。2、安装 Android SDK下载地址:http://developer.android.com/sdk/index.html说明: Android SDK两种下载版本,一种是包含具体版本的SDK的,一种是只有升级工具,而不包含具体的SDK版本,后一种大概20多M,前一种70多M。3、配置模拟器模拟器配置不好,会出现物理键盘部分按键失效的情况,请参考以下方式配置:4、安装 Mono for Android Visual 阅读全文
posted @ 2013-08-07 12:21 顾文锦 阅读(490) 评论(0) 推荐(0) 编辑
  2013年8月1日
摘要: cond和if有着同样的效果,为啥用cond实现的new-if不能用于一些函数?我自己没想明白,在网上搜集了一下答案,部分解答觉得有道理,整理如下:解答1:if和cond都是特定的求值顺序,即先对判断求值,再根据其结果选择需要求值的部分既不是应用序也不是正则序new-if改变了if的特殊性,如果解释器是应用序,则参数需要先行代换,而导致问题如果解释器是正则序,则好像无法支持递归,同样也有问题解答2:http://blog.csdn.net/xuanyun/article/details/1331872引用原文:“我们知道Scheme的解释器在一般情况下采用应用序(Applicative Ord 阅读全文
posted @ 2013-08-01 11:28 顾文锦 阅读(709) 评论(0) 推荐(0) 编辑
摘要: 《Go语言编程》中写到:“从功能和易用性等方面考虑, Eclipse+GoEclipse、LiteIDE这两个环境在所有IDE里面是表现最好的”,所以笔者打算采用Eclipse+GoEclipse开发环境。Eclipse平台下配置Go语言开发环境步骤:1、安装JDK和Eclipse 建议JDK1.6及以上版本。Eclipse3.6及以上版本。2、安装GoEclipse插件 在Eclipse中点击菜单“Help”-》“Install New Software”打开如下对话框,添加go插件的安装地址:http://goclipse.googlecode.com/svn/trunk/goclip.. 阅读全文
posted @ 2013-08-01 11:07 顾文锦 阅读(5825) 评论(0) 推荐(0) 编辑
  2012年12月6日
摘要: 严格路由和松路由1、松路由的地址列表中并不列出一条完备而严格的路径,而是只给出路径中的某些关键点。在关键点之间可以通过路由器的自动路由选择功能进行路由,在数据包分片的时候也必须被复制。SIP消息中如果第一个Route头域中的参数中包含lr参数为松路由。2、严格路由要求数据包必须严格按照发送方规定的路径经过每一个路由器,这些路由器应该是一一相连的,每两个指定的路由器之间不能有其他未指定的路由器,且路由器的顺序是不能改变的。如果数据包在传输时无法直接到达下一跳指定的路由器,路由器就会丢弃该数据包,然后产生一个源路由失败的目的不可达的ICMP差错报文报告给发送方。SIP消息中如果第一个Route头域 阅读全文
posted @ 2012-12-06 14:12 顾文锦 阅读(1455) 评论(0) 推荐(0) 编辑
  2012年10月25日
摘要: 抱仆守拙 涉世之法!涉世浅,点染亦浅;历事深,机械亦深.故君子与其练达,不若朴鲁;与其曲谨,不若疏狂.[译文]一般来说,涉世不深的人,所沾染的不良习惯也相对来说要少一些;而阅历比较丰富的人,所懂得的奸谋技巧也就比较多.所以想做一个心胸坦荡的君子,与其精明老炼,熟悉人情世故,不如纯朴天真,做个诚恳正直的人,与其处片谨小慎微拘泥小节,不如坦坦荡荡光明磊落.[评说]一个人为人处事,心须胸怀正直良心,与人为善,不必矫揉造作,这样便可以吃得安稳饭,睡得安稳觉.如果一味追求世固圆滑,逢场作戏,势必钻进自己的圈套,后悔还来不及!心事宜明 才华宜藏君子之心事,天青日白,不可使人不知;君子之才华,玉韫珠藏,不可 阅读全文
posted @ 2012-10-25 08:56 顾文锦 阅读(241) 评论(0) 推荐(0) 编辑