我之前承诺了,会分享一些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
--
来自: Golang China 中文Go语言技术邮件列表
发言: golang...@googlegroups.com
在线: http://groups.google.com/group/golang-china?hl=zh-CN
����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
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
好吧,说实在,我更感兴趣您现在都忙些什么?能够介绍下自己么?:)
--
来自: Golang China 中文Go语言技术邮件列表
发言: golang...@googlegroups.com
在线: http://groups.google.com/group/golang-china?hl=zh-CN
--
许式伟
- 研究go的人越来越多了哈!
- 看你的id 都以为从 haskell 转过来的,,,
俺是看什么漂亮就都想学的,結果什么 也没有深入...
--
人生苦短, Pythonic! 冗余不做,日子甭过!备份不做,十恶不赦!
俺: http://about.me/zoom.quiet
文字协议: http://creativecommons.org/licenses/by-sa/2.5/cn/