传送门
搜吧 搜贴
{{data.msgCount}}
注册 登陆
{{user.name}}
搜吧 搜贴
个人空间
创吧首页
关注的吧
关注用户
过往好贴
我的创吧
我的主题
新建创吧
功能介绍
帮助建议
35 0 2015-12-16 17:17
创建: 点空示例模板
0 0 0 创建:2016-1-26 21:32 回复:2016-1-26 21:32

go语言整体趋势很好,虽然现在还有些坑,拥有在服务器端一统天下的前景。然而,由于语法趋于稳定,有些不舒服的小疙瘩,写go的人,大概是要永远忍受下去了:

先说结论:go的这些小疙瘩,会大幅增加翻阅文档、处理错误的工作量,感觉挺影响效率的。别的倒都能接受。

1. 没有类,用结构体模拟类,每个方法前,都要输入一遍结构体名字
一个类,十个方法,就要输入10次,类似这样:
func (s *结构体名字) SomeFunction(....)
加粗的,就是每个方法前都要写的玩意。别的倒没啥,就是重复量太大,影响阅读。

2. 允许多个返回值,经常返回值数量报错,明显增加了修正工作量。
其他语言,都是返回一个值,go是返回多个,具体几个可以随便指定。于是,用别人写的包,必须要去查看那些方法的参数个数,增加了翻文档工作量。

3. 没有 try catch,到处都要做 error是否为空的判断。
nodejs只要最外层一个try catch处理下,就行了。不管方法中,还有多少层方法调用,只在最外层处理。

go要自己手动一层层的把error传回来,最终,让最外层去处理。于是,到处都这样代码:

//do something, return an error, then:
if err != 空 {
    return err
}

理论上,用recover实现个try catch也可以,类似这样:https://github.com/manucorporat/try 
但是按照go的整套体系,大部分时候,还是一层层处理error,手动传回来的。。。

4. 没有泛型,只有接口
而且,接口只能包含方法,对于字段,则只能在接口中去写 Get Set 方法。
假如有结构体含10个字段,要把它泛型化,就要写10个get和10个set方法、再针对这个接口,每一种变化,都写一个对应处理方法。

c#和java有泛型,nodejs变量可以不指定类型。go就必须自己写接口,比较累。

5. github上golang包的大部分作者,依赖go自动生成的文档。而那个文档页面,易读性很差,读起来比较累。
在所有问题中,就是这个和处理error那个问题,特别烦。因为翻阅频繁,相当影响效率。
我们做了个扩展解决:https://github.com/diankong/GoDocTooltip 


理论上,最好有个基于 nodejs es7标准语法,又能做到go的性能的编译器。那就没go什么事情了。

Log
由:点空交流,编辑于:2016-1-28 7:40:34
由:点空交流,编辑于:2016-1-26 21:42:28
/{{pageInfo.count}}
/{{pageInfo.count}}
{{newPost.content.length}}/30000
{{currentPost.content.length}}/30000
标题:
操作
多维分类开关
{{category.name}}:
{{topic.content.length}}/50000