eXile 的专栏

好玩的Go语言

     1.什么是Go语言

    Go语言是Google推出的新的一个致力于系统级的编程语言。很多人说它是 C + Python,既有c的灵活高效,又有Python的简单易用,它的原则是 Simple && Fast。它的语法规则很简单。其官方网站上有一个《三天学会Go语言》的教程,包括三部分:基本结构,面向对象,并发。一个周末的时间就差不多可以掌握其基本面貌。相对来说,第三部分“并发”似乎难接受一些。但是如果你对多线程,同步,消息队列这些东西很有经验的话,对它的概念也会容易理解。

     2.Go语言的面向对象

     Go语言在C语言语法的基础上,以最简洁的形式加入了面向对象。
    关于继承:Go语言没有继承。但是它支持嵌入,这个有点类似于其它语言的mixin,可以用来模拟继承。
    关于多态:Go 语言的最大特点是它的接口定义。所谓“接口”,就是一组方法的集合。任何一个类只要实现了一个接口的所有方法,则是该接口的实现者,不需要显式声明实现该接口。所以一个没有任何方法的空接口可以代表任何类型。
   
     3.Go语言的并发

     Go语言提出一个新的概念—Go例程,有点类似于线程,但是更加轻量,更省资源。Go例程之间的通信方式 ——信道,这是GO 语言的核心概念,有点类似于UNIX的Pipe。在Go语言中,不需要接触线程,锁这些低阶概念。

     4.Go语言可以用来做什么

     Go语言目前最强的是它的网络功能。它的package中已经实现了最常见的网络协议和编码处理。Go的官方网站使用的就是Go语言,实际上它就是Go的文档系统godoc。
      还没有官方对数据库支持,不过因为通过某种办法可以在Go语言中直接调用C函数,所以很容易的实现对MYSQL 或者 Sqlite 这些数据库的支持。
      至于GUI,这估计目前还不在设计者的考虑范围之内,因为他们连Windows都不舍得支持。不过可以通过它的http包和template包等等,已经构成了一个WEB框架,可以用来实现WEB GUI的开发,使用Go写一个带有路径分派的Http服务器也就几行代码的事。
    


posted on 2010-01-11 19:48 eXile 阅读(22002) 评论(39)  编辑 收藏 引用 所属分类: 网络开发

评论

# re: 好玩的Go语言 2010-01-12 12:38 陈梓瀚(vczh)

mixin可能造成的问题有:子类指针不能转成父类指针。如果真的不能,那继承是没意义的。  回复  更多评论   

# re: 好玩的Go语言 2010-01-12 13:16 eXile

是的,毕竟Go没有继承,没有虚函数,它没有子类和父类的概念,所有的指针都视为不同的类型。但是,对于Go语言来说,接口不是指针,这是它和其它语言的不同。如果要多态,就应该使用接口,而不是具体的类。  回复  更多评论   

# re: 好玩的Go语言 2010-01-12 15:50 陈梓瀚(vczh)

@eXile
这也会带来问题,譬如说我有很多个同时针对IFooA和IFooB的实现,其中大部分函数的实现相同,没继承你只好复制代码了。  回复  更多评论   

# re: 好玩的Go语言 2010-01-12 17:31 eXile

@陈梓瀚(vczh)
如果可能的话,把相同的代码提取出来,组成一个新类或新函数,再组合进去。或者,使用一个代理类。我觉得利用嵌入还是比较好解决这个问题的。  回复  更多评论   

# re: 好玩的Go语言 2010-01-12 18:04 eXile

@陈梓瀚(vczh)
面向对象的两条重要原则:1.面向接口编程,而不是面向实现编程 2 优先使用组合而不是继承, 这在别的语言中只不过是口头约定,而在Go语言中,你则不得不这样做。  回复  更多评论   

# re: 好玩的Go语言 2010-01-12 21:13 eXile

关于为什么没有继承,官方FAQ是这么说的:它简化了类之间的关系,不再有复杂的类型体系。接口的隐式风格,使一个类型不需要提前声明,就可以一次满足多个接口,同时又没有传统的多重继承的复杂性——“这种风格需要一段时间来适应,但这是Go语言最令人激动的事情之一”。  回复  更多评论   

# re: 好玩的Go语言 2010-01-12 23:34 陈梓瀚(vczh)

@eXile
所以说,过分强调原则只会降低生产率。C++其实都能做,但是人们在这种情况下会非常自觉,然后再不得不例外的时候例外。不允许例外是不好的。  回复  更多评论   

# re: 好玩的Go语言 2010-01-12 23:35 陈梓瀚(vczh)

@eXile
至于说不需要提前声明估计最根本的原因是为了简化编译器的开发吧。因为在设计语言的时候我也会不自觉的倾向于这种设计,不过最后我还是坚持挑战编译器的开发而不是添加约束。  回复  更多评论   

# re: 好玩的Go语言 2010-01-12 23:39 陈梓瀚(vczh)

@陈梓瀚(vczh)
不过最近我倾向于pattern matching了……这根继承不同。继承具有纵向扩展性,你可以添加新的实体,为已有的规则添加新内容。Pattern matching则是横向的,重点在于添加规则而不是添加新的实体。如果可以两者结合起来,那应该是一件令人激动人心的事情。

当然这还是一个方向问题。现在CPU越来越快内存越来越大,语言应该倾向于更容易写。倾向于执行起来快但是开发效率不高的只能在极少的领域里面应用。估计google不关心这个吧。  回复  更多评论   

# re: 好玩的Go语言 2010-01-13 00:05 eXile

@陈梓瀚(vczh)
不需要提前声明估计最根本的原因是为了简化编译器的开发吧?
不是这么简单。这是Go语言与其它面向对象语言的最大不同。举个例子就明白了,

type MyInterface interface { func doIt() } // 接口

type A struct {}
func (self *A) doIt() {} // 指针

type B struct {}
func (b B) doIt() {} //值

type C struct { A } // 嵌入

则A, B,C 都实现了MyInterface接口,也就都是MyInterface类型。没有继承,没有显式说明,静态绑定。Go把它称之为“最令人激动的事情之一” 不是没有道理的。
  回复  更多评论   

# re: 好玩的Go语言 2010-01-13 00:09 eXile

说到开发效率, 在服务器领域,Go绝对优于Java,C++,就不用提了。  回复  更多评论   

# re: 好玩的Go语言 2010-01-13 10:36 陈梓瀚(vczh)

@eXile
哦,这就是concept嘛。MyInterface会被自动匹配进A。但是我想,如果A的所有函数都分散在各个文件里面,他还不是得全部读完了才能进行这个分析。所以只是没有向前声明,取而代之是全文搜索。

那我还有一个问题,interface有没有显式继承?(go语言的官方网站竟然被墙艸)  回复  更多评论   

# re: 好玩的Go语言 2010-01-13 10:40 陈梓瀚(vczh)

@eXile
当然说绝对由于Java和C++什么的还是说得太早啊,关键还要看这个语言是不适合用来写大量的库,还有其ABI是什么样子的。当然库包含两种

1:代码包含。程序越大编译时间越长。
2:二进制。这样子如果我有两个二进制库,第一个有interface,第二个有恰好可以匹配进去的类,那么就有问题。

当然想来想去你说mixin和自动匹配interface同时存在的话,其实和多重继承就是一回事,仅仅是少写了一点声明父类的代码而已。并不是什么激动人心的新东西。C++的template早就是这个意思了。  回复  更多评论   

# re: 好玩的Go语言 2010-01-13 11:27 eXile

@陈梓瀚(vczh)
1)编译分析是根据包packege来进行的,一个类的函数必须定义在一个包中,但可以在不同的文件中。
2)interface有显式继承,当然也是以嵌入的形式。我也想到了C++的concept,但是Go接口又具有动态特性。
3)Go具有和C一样的ABI,一样的类型,一样的结构布局,所以从Go调用C很容易,但是,因为有GC,所以不支持从C调用Go。
4)超快的编译速度,无论是Go还是D语言,对c/c++的一个很大的不满就是编译太慢,当然不会再出现这个问题。库是二进制的。Go目前有两套编译器,其中一个编译器gccgo的目标是和gcc二进制兼容。
5)Go语言的库都是用Go语言来写的,个人感觉很好读,代码量也少得多,每个库也就是一两个实现文件,是学习Go的最好途径。  回复  更多评论   

# re: 好玩的Go语言 2010-01-13 11:30 eXile

吊诡的是,go语言的官方网站我在Windows下不能访问,但在Linux下可正常访问  回复  更多评论   

# re: 好玩的Go语言 2010-01-13 15:53 陈梓瀚(vczh)

@eXile
我明白了,一个真正彻底的方法是,你用接近动态语言的语法来写程序,然后编译器帮你推导出所有的interface结构(你连interface都不用写了,而且你一旦真的写错了编译器还会告诉你,多好),还有各个函数的类型。在vlpp的框架完成之后,我去实现它。  回复  更多评论   

# re: 好玩的Go语言 2010-01-13 22:39 空明流转

@陈梓瀚(vczh)
编译时间怎么办。。。。怎么办。。。  回复  更多评论   

# re: 好玩的Go语言 2010-01-14 02:05 陈梓瀚(vczh)

@空明流转
我不信编译时间能比程序员因为没有语言这个功能而多花的写代码的时间长  回复  更多评论   

# re: 好玩的Go语言 2010-01-14 09:50 bluegene

个人感觉go语言目前的进展不快啊,这么早就把它开源,看来google不愿意投入太多的精力在上面啊  回复  更多评论   

# re: 好玩的Go语言 2010-01-14 10:43 eXile

@陈梓瀚(vczh)
Go接口的实现可能是这样的,假设函数定义的形参类型为Myinterface,而实际调用的实参类型为A,所编译器会对A生成一个关于Myinterface的方法表,这样,实参的值并不是一个简单的对象指针,而是对象指针再加上方法表的首地址。  回复  更多评论   

# re: 好玩的Go语言 2010-01-14 10:49 eXile

@bluegene
这是想借助开源社区的力量,比如现在已经有人在做Windows 的移植,以及数据库的客户端,还有人在讨论GUI的设计。对于老外来说,开源只会太迟,不会太早。
  回复  更多评论   

# re: 好玩的Go语言 2010-01-14 12:20 陈梓瀚(vczh)

@eXile
可怜的google  回复  更多评论   

# re: 好玩的Go语言[未登录] 2010-01-14 21:40 eXile

@陈梓瀚(vczh)
google不可怜,可怜的是网民。  回复  更多评论   

# re: 好玩的Go语言 2010-01-15 01:21 linbc

看来,这是我理想中的语言,简单应当是美  回复  更多评论   

# re: 好玩的Go语言 2010-01-15 14:56 陈梓瀚(vczh)

@linbc
简洁才是美  回复  更多评论   

# 呵呵,我也喜欢Go语言 2010-01-19 09:25 lvscar

我对这个语言也很感兴趣, 现在开始尝试用它来写一些小东西. 如果得空欢迎和我交流 gtalk&email: lvscar <at> gmail.com  回复  更多评论   

# re: 好玩的Go语言 2010-03-02 16:02 四不象

duck typing , I like it  回复  更多评论   

# re: 好玩的Go语言 2010-03-06 09:10 科杰

我觉得只要是简单,并且跨平台就算一门好的编程语言了
科杰:www.kjhq.com  回复  更多评论   

# re: 好玩的Go语言 2010-07-12 08:51 AngelitaVaughan

It's understandable that cash can make people free. But how to act when one doesn't have money? The one way only is to receive the <a href="http://bestfinance-blog.com/topics/business-loans">business loans</a> and just collateral loan.   回复  更多评论   

# re: 好玩的Go语言 2010-07-27 05:48 buy essay

If people want to see more facts about this good topic, they should purchase custom written essays or buy an essay with the help of research paper writing services.   回复  更多评论   

# re: 好玩的Go语言 2010-08-05 20:03 dissertation

I state that high school students would be satisfied, if order thesis topic at thesis writing service. Furthermore, this can save free time.   回复  更多评论   

# re: 好玩的Go语言 2011-03-01 11:14 殷远超

继承是为了传递特性,并不一定要用虚函数分发。在C++模板编程里面也可以用得上。@陈梓瀚(vczh)
  回复  更多评论   

# re: 好玩的Go语言 2013-10-17 23:57 Internet site

Our expert resume writers will be happy to provide professional CV writing services to potential employees who do not have time to write a resume. Consider ResumesExpert company "resumesexpert.com" and view CV templates. Now you have the necessary info where to buy resume paper, so do not doubt order resume and enjoy your career.  回复  更多评论   

# re: 好玩的Go语言 2013-10-17 23:57 CustomEssays.co.uk rewiew

Don’t know which firm to pick to receive help from? Look through QualityEssay testimonials, and come to a sound choice.  回复  更多评论   

# re: 好玩的Go语言 2013-10-17 23:59 check here

Have no clue which firm to select to obtain assistance from? Look over College-Paper testimonials "essaysreview.com", and come to a sound decision.  回复  更多评论   

# re: 好玩的Go语言 2013-10-17 23:59 up here

Our professional resume writers will provide help with resume writing to job seekers who do not have time to write a resume. View this ResumesExpert company resumesexpert.com and check resume writing samples. Now you have the necessary info where to buy resume paper, so do not hesitate buy resume and build your career.  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


导航

<2010年1月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456

统计

常用链接

留言簿(18)

随笔分类

随笔档案

服务器编程

搜索

最新评论

阅读排行榜

评论排行榜