采用一门新编程语言,或不采用

我大体上对编程语言感兴趣。特别低,我一直对另一门编程语言 如何能够提供给我表达程序的新特性以及允许我成长为一名程序员 感到好奇。 我在校时学到了第一门语言。那儿的电脑------一屋子都是PET 2001,那时候他们是新潮的------只有BASIC,很快就让我失望了。在大学,我开始了一门Pascal的课程,闲暇做了很多编程。Pascal很快填补了我在BASIC发现的恼人的不足。 带着兴趣我学习了FORTRAN基础,但是从来没有真正用过。Modula 2 出现了,甚至有更大的编程分配,但是没有真...阅读全文

Go语言 goroutine一些常用技巧

1. 操作系统与运行库 “运行库”这个词其实不止包括用于和编译后的目标执行程序进行链接的库文件,也包括了脚本语言或字节码解释型语言的运行环境,譬如Python,C#的CLR,Java的JRE。 对系统调用的封装只是运行库的很小一部分功能,运行库通常还提供了诸如字符串处理、数学计算、常用数据结构容器等等不需要操作系统支持的功能,同时,运行库也会对操作系统支持的功能提供更易用更高级的封装,譬如带缓存和格式的IO、线程池。 1. 支持新的语义或语法,从而便于我们描述和解决问题。譬如Java的泛型、An...阅读全文

CSDN博客 2014-04-20 20:47 abv123456789

Go语言 美妙的channel(下)

严格意义上说,本文是我另外一片文章《Golang Funny: Play with Channel》的中文版本。不过,毕竟是用中文当母语的,所以就不翻译了,重新按照那个内容写过吧。 channel 是 golang 里相当有趣的一个功能,在我使用 golang 编码的经验里,大部分事件都会是在享受 channel 和 goroutine 配合的乐趣。所以本文主要介绍 channel 的一些有趣的用法。 这里有 Oling Cat 翻译的Go编程语言规范里关于 channel(信道)的描述:信道提...阅读全文

CSDN博客 2014-04-20 19:35 abv123456789

Go语言 GC优化经验分享

不想看长篇大论的,这里先给个结论,go的gc还不完善但也不算不靠谱,关键看怎么用,尽量不要创建大量对象,也尽量不要频繁创建对象,这个道理其实在所有带gc的编程语言也都通用。 想知道如何提前预防和解决问题的,请耐心看下去。 我们项目的服务端完全用Go语言开发的,游戏数据都放在内存中由go 管理。 在上线测试后我对程序做了很多调优工作,最初是稳定性优先,所以先解决的是内存泄漏问题,主要靠memprof来定位问题,接着是进一步提高性能,主要靠cpuprof和自己做的一些统计信息来定位问题。 调优性能的...阅读全文

CSDN博客 2014-04-20 20:56 abv123456789

Golang适合高并发场景的原因分析

来源:http://blog.csdn.net/ghj1976/article/details/27996095作者:蝈蝈俊典型的两个现实案例:我们先看两个用Go做消息推送的案例实际处理能力。360消息推送的数据:16台机器,标配:24个硬件线程,64GB内存 Linux Kernel 2.6.32 x86_64 单机80万并发连接,load 0.2~0.4,CPU 总使用率 7%~10%,内存占用20GB (res) 目前接入的产品约1280万在线用户 2分钟一次GC,停顿2秒 (1.0.3 ...阅读全文

CSDN博客 2014-06-23 19:41 heiyeshuwu

Golang中的接口与鸭子类型

1 接口的定义与理解 接口是一个自定义类型,它是一组方法的集合。从定义上来看,接口有两个特点。第一,接口本质是一种自定义类型,因此不要将golang中的接口简单理解为C++/Java中的接口,后者仅用于声明方法签名。第二,接口是一种特殊的自定义类型,其中没有数据成员,只有方法(也可以为空)。 接口是完全抽象的,因此不能将其实例化。然而,可以创建一个其类型为接口的变量,它可以被赋值为任何满足该接口类型的实际类型的值。接口的重要特性是: (1)只要某个类型实现了接口要的方法,那么我们就说该类型实现了...阅读全文

51CTO博客 2015-10-15 16:29:16 说话的白菜

Go语言 异常处理

Go语言追求简洁优雅,所以,Go语言不支持传统的 try…catch…finally 这种异常,因为Go语言的设计者们认为,将异常与控制结构混在一起会很容易使得代码变得混乱。因为开发者很容易滥用异常,甚至一个小小的错误都抛出一个异常。在Go语言中,使用多值返回来返回错误。不要用异常代替错误,更不要用来控制流程。在极个别的情况下,也就是说,遇到真正的异常的情况下(比如除数为0了)。才使用Go中引入的Exception处理:defer, panic, recover。 这几个异常的使用场景可以这么简...阅读全文

CSDN博客 2014-04-20 20:33 abv123456789

Golang Web框架 Tiny Go Web

Tiny Go Web (TGW)是一个非常简单的Web框架,甚至谈不上框架。TGW无意取代任何框架,TGW的诞生是因为作者在使用beego时有种挫败感,决定自己重新写一个适合自己网站用的(私人借书网,因为网站没有完成备案,暂时由托管在US的vps进行反向代理到ucloud主机,访问可能会有一定的延时),从构思到完成总共只花了一天时间,因为觉得它已经够用了,就没有继续添加新的功能。 项目地址:http://github.com/icattlecoder/tgw Qiuck Start > go ...阅读全文

Segmentfault 2014年05月01日 icattlecoder

[Go] --- 变量的声明和定义

Email : hahayacoder@gmail.com 1 Go中变量的声明和JavaScript很像,使用var关键字 2 Go中变量的声明、定义有好几种形式 //声明并初始化一个变量 var m int = 10 //声明初始化多个变量 var i, j, k = 1, 2, 3 //多个变量的声明(注意小括号的使用) var( no int name string ) //声明时不指明类型,通过初始化值来推导 var b = true//bool型 //一种简单的方式等价于varstr...阅读全文

CSDN博客 2013-03-31 10:14 qiurisuixiang

Sublime Text 2搭建Go开发环境(Windows)

对于不了解Sublime Text 2的朋友,可以看看官网:http://www.sublimetext.com/(总的来说是一个轻量级,用起来很方便的工具)。 1. 下载 Sublime Text 2,地址如下:http://www.sublimetext.com/。 2. 安装 Package Control,在打开 Sublime Text 2以后,按下快捷键 Ctrl + `,打开命令窗行,`这个按键在Tab键的上面。输入以下内容,并回车: import urllib2,os; pf='...阅读全文

CSDN博客 2014-09-30 22:43 oShaPoLang

使用Go代替Ruby,将服务器数量从30降到2

使用另一种语言去重写一个服务,听起来是不是很折腾?然而云服务供应商Iron.io就这么做了,并成功的将服务器从30台降至了2台。Iron.io在其官方博客上公布了整个事件的始末,下面来了解一下: Iron.io与IronWorker Iron.io起初为帮助其它公司建立应用程序的咨询公司,现为云服务供应商。Iron.io开发IronWorker的理由同样很老套。 之前说过Iron.io曾是家咨询公司,而在IronWorker开发的那段时间,AWS和Ruby on Rails是两个非常火的领域。而...阅读全文

Segmentfault 2014年04月11日 weakish

Golang编码规范

注:此文是作者所在团队约定的编码规范,参考官方指南Effective Golang和Golang Code Review Comments进行整理,力图与官方及社区编码风格保持一致。 gofmt 大部分的格式问题可以通过gofmt解决,gofmt自动格式化代码,保证所有的go代码一致的格式。 正常情况下,采用Sublime编写go代码时,插件GoSublilme已经调用gofmt对代码实现了格式化。 注释 在编码阶段同步写好变量、函数、包注释,注释可以通过godoc导出生成文档。 注释必须是完整...阅读全文

Segmentfault 2014年04月10日 lubia

Mac OSX 10.9.1下安装Go语言并配置环境变量

看了网上很多人关于mac下配置go的文章,感觉都没有讲清楚,所以来记录一下自己安装配置的全过程,以免大家走弯路。 去go官方首页英文版,不习惯看英文的请猛击中文版。在Document下有install go的官方指导,点Download Go会出现各版本,mac10.9选择这两个其一均可,只不过.tar.gz是压缩档安装包,想省事的就下载pkg,一路傻瓜next就行了。 pkg默认是安装到/usr/local/go 安装部分已经搞定,接下来是配置mac下的环境变量。这是最关键的。 打开终端(Te...阅读全文

CSDN博客 2014-03-08 11:08 lan2720

heartbleeder 自动检测 OpenSSL 心脏出血漏洞 (附修复指南)

heartbleeder 可以探测你的服务器是否存在 OpenSSL CVE-2014-0160 漏洞 (心脏出血漏洞)。 什么是心脏出血漏洞? CVE-2014-0160,心脏出血漏洞,是一个非常严重的 OpenSSL 漏洞。这个漏洞使得攻击者可以从存在漏洞的服务器上读取64KB大小的内存信息。这些信息中可能包含非常敏感的信息,包括用户请求、密码甚至证书的私钥。 据称,已经有攻击者在某宝上尝试使用漏洞读取数据,在读取200次后,获取了40多个用户名和7个密码。 如何使用 heartbleede...阅读全文

Segmentfault 2014年04月09日 weakish

Golang mgo驱动指定Mongo服务器读取

Replica Sets搭建 服务器采用Replica Sets搭建,可参考Deploy a Replica Set 读模式 Mongod的读模式共有五种: primary. 在主节点上进行所有的读操作 primaryPreferred. 优先在主节点上进行读操作,如果主节点不可用,再从从节点操作。 secondary.所有的读操作在从节点上进行。 secondaryPreferred.优先在从节点进行读操作,如果所有从节点都不可用,再从主节点操作。 nearest. 根据网络延迟时间 ,就近进...阅读全文

Segmentfault 2014年04月09日 icattlecoder

Node.js性能初窥-计算性能(Qt/C++,Golang,Node.js)

大家都知道Node.js的单进程非阻塞模型适合于任务密集性(I/O)而不是计算密集型.那么到底有多不适合计算呢?下面做一个简单的测试. 测试硬件平台如下: 电脑型号 苹果 Macmini6,2 Lunch Box 操作系统 Windows 8 Enterprise 64位 ( DirectX 11 ) 处理器 英特尔 第三代酷睿 i7-3615QM @ 2.30GHz 四核 内存 16 GB ( 三星 DDR3 1600MHz ) 主硬盘 APPLE HDD HTS541010A9E662 ( ...阅读全文

CSDN博客 2013-11-08 15:16 wzg_j

Golang的嵌入和继承

golang不支持继承,只支持嵌入和聚合(匿名字段称为嵌入,具名字段称为聚合)。golang通过嵌入,可以到达类似继承的效果,而且更为简洁。 一个例子type Base struct{ b int } func (base *Base) setB(i int) { base.b = base.b + i } type Derive struct { Base // embed d int // aggregation } func (derive *Derive) setD(i int) { d...阅读全文

51CTO博客 2015-10-15 16:18:35 说话的白菜