[uniqush]Go开发心得

173 views
Skip to first unread message

mon...@gmail.com

unread,
Dec 25, 2011, 6:21:04 PM12/25/11
to golang...@googlegroups.com
Hi all,

我之前承诺了,会分享一些Go开发的心得。这个体会主要来自于uniqush这个项目
的开发。项目主页: http://uniqush.org

= Golang是个好语言 =

嗯,是个好语言。个人觉得,以下几个特性会对开发者很有用:

== 先实现,后抽象 ==

你永远不知道未来会发生什么,所以别指望一开始就设计出牛逼的接口。但是你可
以从以往的实践中抽象出接口。

Go的interface最大好处在于:你不必修改以往的实现,就可以把以前的实现放入
之后抽象出的接口里。

也许你觉得在java里加入一条implements没什么,但是随着项目的增长,你会逐渐
发现哪怕每个文件只要修改一行,那也很可能成为各种bug的温床。

== goroutine ==

好吧,我可能又再重复大伙见过不止一次的东西了。不过无论如何,goroutine的
确很适合于未来(现在?)的多核体系结构。它很小(至少是大家期望它很小),
容易实现,占用资源很少。这些(应该有的)特点让开发人员难以抗拒使用
goroutine。而这本身也是go所鼓励的。

说到goroutine就必须说说channel,二者配合确实很方便。不管这东西是不是go首
创,无论如何,它确实好用。

== map ==

map是个关键字,有个map的数据类型,而且是在一个编译型语言里。我觉得这挺
酷。如果告诉python程序员这些,他估计不会兴奋到哪去;如果告诉C++程序员,
他可能会给告诉你STL里也有这玩意;如果告诉C程序员,他也许会找出N多的现成
的哈希表实现。可无论怎么说,go语言本身是支持map的,这真的很好用,确实如此。

关于map,恐怕最大的疑问在于它的效率如何。老实说,我还没做过这方面测试。
我打算抽空做一些这方面的测试,再把结果分享出来。不过无论如何,你真的那么
在乎效率吗?问问python程序员,有多少人在该使用链表的时候,使用了python的
``list‘’(实际是个动态数组)?这也许会让程序员养成坏毛病,不过也的确加快
了开发进度。我们总是要有个龌龊的实现来起步的。

== slice ==

又是一个常用的数据结构。我喜欢。别的不多说,谁用谁知道

== 分号,类型,各种简化 ==

是的,基本用不着分号了。这是个好事。而且 := 操作符减少了很多敲键盘的工
作,尤其是在你有个struct叫做
ThisIsAReallyLongNameForAStructureWhichTakesAlmostALineToFit 的时候。

= 大伙可能关注的问题 =

关于Go语言,个人觉得主要的疑问集中在以下几个问题上:

== 面向对象?它不是面向对象?现在是21世纪了!它应该是面向对象语言! ==

说说俺的体会:go虽然不是OOL,但它的确吸收了OOL的各种精华,并且去除/简化
了各种特性。可能你会怀念多态,怀念C++的函数重载,怀念C++的操作符重载(好
吧,它们不全是OOL的特性,有些是C++的特性),不过总还是有些方法可以解决眼
前的困难的。而且不会比用C++困难多少。

基本来说,常用的设计模式都可以用Go来实现。你还要啥自行车呢?

== 效率!它是个编译语言!它要有效率! ==

1. 给它点时间,Go1马上要出来了。编译器正在优化,而且结果还挺喜人;标准库
优化是要有一段时间的。它是一个只有两年多的语言!
2. 再查查你的代码
3. 再想想,你是想为用户节约0.1秒/请求,来加班3小时吗?我能叫你雷锋吗?

其他的东西欢迎大家补充,我也非常愿意回答各位的问题。

= 关于我 =

还是觉得有必要说说个人经历,这样大伙也方便掂量一下俺说话有几分参考价值。

- 大约有10年的编程经验
- 第一语言是C
- 用C/C++, Python, Perl,当然,现在加上了Go
- 好吧,偶尔也用Java
- 用C/C++大约有几十万行的代码经验。别跟我较真,我真的不知道到底写了多
少,我真没认真数。
- 偶尔搀合点项目

就这些吧,欢迎大家参与讨论。

Regards,
-Monnand

Marvin Guo

unread,
Dec 25, 2011, 8:47:38 PM12/25/11
to golang...@googlegroups.com
不错,能介绍一下uniqush项目吗?

Go自身是非常好的语言,唯一担心是Google对它的打算



--
来自: Golang China 中文Go语言技术邮件列表
发言: golang...@googlegroups.com
在线: http://groups.google.com/group/golang-china?hl=zh-CN

mon...@gmail.com

unread,
Dec 25, 2011, 9:41:43 PM12/25/11
to golang...@googlegroups.com
Marvin Guo wrote, On 12/25/2011 08:47 PM:
> ���?�ܽ���һ��uniqush��Ŀ��
>
> Go�����Ƿdz��õ����ԣ�Ψһ������Google����Ĵ���

����uniqush�����Ѿ�������һ���ʼ�������ˡ����ĵú���Ŀ���ֳܷ�����
thread���������Ժ������Ϣ��

������uniqush��һЩ����Ϣ��

- ��ƣ�uniqush
- ��ҳ��http://uniqush.org
- ���룺http://github.com/monnand/uniqush
- ���֤��Apache License 2.0
- ��ǩ���ֻ�����, Golang, C2DM, APNS, Android, iOS

Regards,
-Monnand

>
> 2011/12/26 mon...@gmail.com <mailto:mon...@gmail.com>
> <mon...@gmail.com <mailto:mon...@gmail.com>>
>
> Hi all,
>
> ��֮ǰ��ŵ�ˣ������һЩGo�������ĵá� ��������Ҫ������uniqush���
> ��Ŀ �Ŀ�������Ŀ��ҳ�� http://uniqush.org
>
> = Golang�Ǹ������� =
>
> �ţ��Ǹ������ԡ����˾��ã����¼������Ի�Կ����ߺ����ã�
>
> == ��ʵ�֣������ ==
>
> ����Զ��֪��δ���ᷢ��ʲô�� ���Ա�ָ��һ��ʼ����Ƴ�ţ�ƵĽӿڡ���
> ����� �Դ������ʵ���г�����ӿڡ�
>
> Go��interface���ô����ڣ��㲻���޸������ʵ�֣� �Ϳ��԰���ǰ��ʵ��
> ���� ֮�������Ľӿ��
>
> Ҳ���������java�����һ��implementsûʲô�� ����������Ŀ����������
> ���� ��������ÿ���ļ�ֻҪ�޸�һ�У� ��Ҳ�ܿ��ܳ�Ϊ����bug���´���
>
> == goroutine ==
>
> �ðɣ��ҿ��������ظ������ֹһ�εĶ����ˡ�����������Σ�
> goroutine�� ȷ���ʺ���δ�������ڣ����Ķ����ϵ�ṹ�����С�� ������
> ����������С���� ����ʵ�֣�ռ����Դ���١���Щ��Ӧ���еģ� �ص��ÿ�
> ����Ա���Կ���ʹ�� goroutine�����Ȿ��Ҳ��go�����ġ�
>
> ˵��goroutine�ͱ���˵˵channel�� �������ȷʵ�ܷ��㡣�����ⶫ���Dz�
> ��go�� ����������Σ���ȷʵ���á�
>
> == map ==
>
> map�Ǹ��ؼ��֣��и�map��������ͣ� ��������һ��������������Ҿ���
> ��ͦ �ᡣ������python����Ա��Щ������Ʋ����˷ܵ���ȥ�� ������
> C++����Ա�� ����ܻ�������STL��Ҳ�������⣻������C����Ա�� ��Ҳ
> ����ҳ�N����ֳ� �Ĺ�ϣ��ʵ�֡���������ô˵��go���Ա�����֧��map
> �ģ� ����ĺܺ��ã�ȷʵ��ˡ�
>
> ����map���������������������Ч����Ρ���ʵ˵�� �һ�û�����ⷽ���
> �ԡ� �Ҵ�������һЩ�ⷽ��IJ��ԣ��ٰѽ���������� ����������Σ�
> �������ô �ں�Ч��������python����Ա�� �ж������ڸ�ʹ�������ʱ
> ��ʹ����python�� ``list������ʵ���Ǹ���̬���飩�� ��Ҳ����ó���Ա��
> �ɻ�ë��������Ҳ��ȷ�ӿ� �˿�����ȡ���������Ҫ�и�������ʵ�����𲽵ġ�
>
> == slice ==
>
> ����һ�����õ���ݽṹ����ϲ������IJ���˵��˭��˭֪��
>
> == �ֺţ����ͣ����ּ� ==
>
> �ǵģ����ò��ŷֺ��ˡ����Ǹ����¡����� := ����������˺ܶ��ü��̵�
> �� ���������������и�struct���� ThisIsAReallyLongNameForAStruc
> tureWhichTakesAlmostALineToFit ��ʱ��
>
> = �����ܹ�ע������ =
>
> ����Go���ԣ����˾�����Ҫ�����ʼ��������¼��������ϣ�
>
> == ������������������������21�����ˣ� ��Ӧ��������������ԣ� ==
>
> ˵˵������᣺go��Ȼ����OOL�� �����ȷ������OOL�ĸ��־���������ȥ��/
> �� �˸������ԡ�������ỳ���̬������C++�ĺ������أ�����C+ +�IJ���
> �����أ��� �ɣ����Dz�ȫ��OOL�����ԣ���Щ��C++�����ԣ��� �����ܻ�����
> Щ�������Խ���� ǰ�����ѵġ����Ҳ������C++���Ѷ��١�
>
> ����˵�����õ����ģʽ��������Go��ʵ�֡� �㻹Ҫɶ���г��أ�
>
> == Ч�ʣ����Ǹ��������ԣ���Ҫ��Ч�ʣ� ==
>
> 1. �����ʱ�䣬Go1����Ҫ�����ˡ������������Ż��� ���ҽ��ͦϲ�ˣ�
> ��׼�� �Ż���Ҫ��һ��ʱ��ġ�����һ��ֻ�����������ԣ�
> 2. �ٲ����Ĵ���
> 3. �����룬������Ϊ�û���Լ0.1��/�������Ӱ�3Сʱ�� ���ܽ����׷���
>
> ����Ķ�����ӭ��Ҳ��䣬��Ҳ�dz�Ը��ش��λ�����⡣
>
> = ������ =
>
> ���Ǿ����б�Ҫ˵˵���˾��� ������Ҳ�������һ�°�˵���м��ֲο�
> ��ֵ��
>
> - ��Լ��10��ı�̾���
> - ��һ������C
> - ��C/C++, Python, Perl����Ȼ�����ڼ�����Go
> - �ðɣ�ż��Ҳ��Java
> - ��C/C++��Լ�м�ʮ���еĴ��뾭�顣����ҽ��棬 ����IJ�֪������д��
> �� �٣�����û������
> - ż���ϵ���Ŀ
>
> ����Щ�ɣ���ӭ��Ҳ������ۡ�
>
> Regards,
> -Monnand
>
> --
> ����: Golang China ����Go���Լ����ʼ��б�
> ����: golang...@googlegroups.com
> <mailto:golang...@googlegroups.com>
> ����: http://groups.google.com/ group/golang-china?hl=zh-CN
> <http://groups.google.com/group/golang-china?hl=zh-CN>
>
>
> --
> ����: Golang China ����Go���Լ����ʼ��б�
> ����: golang...@googlegroups.com
> ����: http://groups.google.com/group/golang-china?hl=zh-CN

gix...@gmail.com

unread,
Dec 25, 2011, 10:50:47 PM12/25/11
to golang...@googlegroups.com
谢谢分享,赞一个。

Marvin Guo wrote, On 12/25/2011 08:47 PM:
> 不错,能介绍一下uniqush项目吗?
>
> Go自身是非常好的语言,唯一担心是Google对它的打算

关于uniqush,我已经在另外一封邮件里介绍了。把心得和项目介绍分成两个
thread,方便大伙以后查找信息。

这里是uniqush的一些基本信息:

- 名称:uniqush
- 主页:http://uniqush.org
- 代码:http://github.com/monnand/uniqush
- 许可证:Apache License 2.0
- 标签:手机推送, Golang, C2DM, APNS, Android, iOS


Regards,
-Monnand

>
> 2011/12/26 mon...@gmail.com <mailto:mon...@gmail.com>
> <mon...@gmail.com <mailto:mon...@gmail.com>>
>
>     Hi all,
>
>     我之前承诺了,会分享一些Go开发的心得。 这个体会主要来自于uniqush这个

>     项目 的开发。项目主页: http://uniqush.org
>
>     = Golang是个好语言 =
>
>     嗯,是个好语言。个人觉得,以下几个特性会对开发者很有用:
>
>     == 先实现,后抽象 ==
>
>     你永远不知道未来会发生什么, 所以别指望一开始就设计出牛逼的接口。但
>     是你可 以从以往的实践中抽象出接口。
>
>     Go的interface最大好处在于:你不必修改以往的实现, 就可以把以前的实现
>     放入 之后抽象出的接口里。
>
>     也许你觉得在java里加入一条implements没什么, 但是随着项目的增长,你
>     会逐渐 发现哪怕每个文件只要修改一行, 那也很可能成为各种bug的温床。
>
>     == goroutine ==
>
>     好吧,我可能又再重复大伙见过不止一次的东西了。不过无论如何,
>     goroutine的 确很适合于未来(现在?)的多核体系结构。它很小( 至少是
>     大家期望它很小), 容易实现,占用资源很少。这些(应该有的) 特点让开
>     发人员难以抗拒使用 goroutine。而这本身也是go所鼓励的。
>
>     说到goroutine就必须说说channel, 二者配合确实很方便。不管这东西是不
>     是go首 创,无论如何,它确实好用。
>
>     == map ==
>
>     map是个关键字,有个map的数据类型, 而且是在一个编译型语言里。我觉得
>     这挺 酷。如果告诉python程序员这些,他估计不会兴奋到哪去; 如果告诉
>     C++程序员, 他可能会给告诉你STL里也有这玩意;如果告诉C程序员, 他也
>     许会找出N多的现成 的哈希表实现。可无论怎么说,go语言本身是支持map
>     的, 这真的很好用,确实如此。
>     <mailto:golang...@googlegroups.com>
>     在线: http://groups.google.com/ group/golang-china?hl=zh-CN

Monnand

unread,
Dec 26, 2011, 1:43:16 PM12/26/11
to golang...@googlegroups.com


2011/12/26 shiwei xu <xushi...@gmail.com>
好吧,说实在,我更感兴趣您现在都忙些什么?能够介绍下自己么?
:)

原来是许大牛啊。久仰久仰!

我现在是肉身翻墙,人在美帝读书。计算机专业,
研究方向是数据中心的能耗控制。当下正忙着赶论文投论文,给导师打工,拿点糊口不养家的钱,目睹着资本主义的腐朽堕落,水深火热。

出国前跟哲思那边联系比较多,所以列表里最熟悉的名字是ZQ大妈。


Regards,
-Monnand
 
--
来自: Golang China 中文Go语言技术邮件列表
发言: golang...@googlegroups.com
在线: http://groups.google.com/group/golang-china?hl=zh-CN



--
许式伟

Zoom.Quiet

unread,
Dec 26, 2011, 7:59:39 PM12/26/11
to golang...@googlegroups.com
2011/12/27 Monnand <mon...@gmail.com>:

> 2011/12/26 shiwei xu <xushi...@gmail.com>
>>
>> 好吧,说实在,我更感兴趣您现在都忙些什么?能够介绍下自己么?
>> :)
>
>
> 原来是许大牛啊。久仰久仰!
>
> 我现在是肉身翻墙,人在美帝读书。计算机专业,
> 研究方向是数据中心的能耗控制。当下正忙着赶论文投论文,给导师打工,拿点糊口不养家的钱,目睹着资本主义的腐朽堕落,水深火热。
>
> 出国前跟哲思那边联系比较多,所以列表里最熟悉的名字是ZQ大妈。
>

- 研究go的人越来越多了哈!
- 看你的id 都以为从 haskell 转过来的,,,
俺是看什么漂亮就都想学的,結果什么 也没有深入...

--
人生苦短, Pythonic! 冗余不做,日子甭过!备份不做,十恶不赦!
俺: http://about.me/zoom.quiet
文字协议: http://creativecommons.org/licenses/by-sa/2.5/cn/

Reply all
Reply to author
Forward
0 new messages