Go 与 泛型: 优点 or 缺陷

2017-02-08 09:26:18 +08:00
 banxi1988

之前看到 Go 中国 的文章: 为什么说 2017 年你必须要学习 Go 了

其中把 Go 语言没有泛型作为其优点之一.

昨天晚上看到新发的文章: Russ Cox 的 2017 年 Go 开发计划

注: Russ Cox 目前是 Go Team 的 leader

其中对于泛型有这么一两句话:

我不相信 Go 团队曾经说过“ Go 不需要泛型”

但我们确实明白,对于 Go 来说缺乏参数多态性是一个显著的障碍。

这样看来, 在 Go 开发团队眼中, Go 没有泛型并不是一个优点啊.

8697 次点击
所在节点    Go 编程语言
128 条回复
noli
2017-02-08 12:21:00 +08:00
@CRVV

要这么说的话……那应该 C/C++是世界上最好的语言?毕竟 Linux , Windows 都是用它们写的。
golang 有什么特点可以说明 docker 这样的软件用它来写是最好的呢?
我觉得只有“适逢其时” 这一点了。

话说, Mono 或者 .NET runtime 本身就是一个 可以自行隔离多个组件的 VM 呢,
C# 的动态加载 API 也能支持这一点,这难道不比 golang 屌么
shawngao
2017-02-08 12:23:17 +08:00
一门语言就应该包罗万象么?
每个语言都有自己的优缺点吧!
如果不能忍就自己写一门语言吧!
CRVV
2017-02-08 12:29:03 +08:00
@noli

我仅仅是回复了 “ golang 除了写 业务 server 之外,没有想到任何别的场合是能用的” ,表达一下 Go 还有其它的场合“能用” 而已

我没说 Go 在这两个场合好用,我也没说它是一个好语言,我也没说它比任何一个语言好

你这回复得莫名其妙
jarlyyn
2017-02-08 12:47:09 +08:00
@noli

最近用下来, golang 是一门不错的语言。一定要让我在 golang 和 c#中放弃一门语言(注意,不是选择)的话,我肯定选择 C#。

golang 能做什么?什么只能用 golang 来做?

这个世界有这么多门语言,有什么是只能用一门语言来做的吗?

没有一个语言是最好的。

golang 现在编译快,概念少,有 GC ,明显 直接 的竞争对手是部分脚本语言的领域。

静态理性,部署容易,性能略高。

我用 golang 是用来代替了很多我本来用 Python 甚至 Nodejs 做的事情而已。

至于为什么放弃 C#,还有比 c#更 尴尬 的语言吗? c#似乎在哪个领域都做不到老大?

说句不好听的。只能用一门语言来完成工作处理问题的,还能叫程序员?

既然要学多门语言,易学部署容易的优势还不够大吗?
noli
2017-02-08 12:50:14 +08:00
@CRVV 我的意思是,这个世界并不需要到处都需要重新实现写一个 docker ,但是到处都需要写业务服务器,到处都需要 OS 。更重要的是, docker 作为一个具体的软件是可替代的。但是业务服务器作为一个广义需求是无法被替代的。所以,我的意思就是,你举 docker 这个例子来试图说明“ golang 有别的场合能用”,我也是觉得怪怪得,因为 docker 本身并不代表一个 场合。
husinhu
2017-02-08 12:58:08 +08:00
Golang blog 在 2010 年就说过了,尤其最后一句 - "我们写了越多的 Go ,就越发现不需要这个 feature"

Do you have plans to implement generics? Many proposals for generics-like features have been mooted both publicly and internally, but as yet we haven't found a proposal that is consistent with the rest of the language. We think that one of Go's key strengths is its simplicity, so we are wary of introducing new features that might make the language more difficult to understand. Additionally, the more Go code we write (and thus the better we learn how to write Go code ourselves), the less we feel the need for such a language feature.
noli
2017-02-08 12:58:13 +08:00
@jarlyyn 我觉得很多人在讨论语言的时候,经常会陷入一个思维误区。
不存在“世界上最好的语言” -> 语言之间没有优劣之分。 请问这个推导你认为成立吗?
我认为不成立。

C# 部署难吗,有 .net 就 .net , 有 mono 就 mono , 两个都没有,我还能 AOT 成本地二进制。部署难吗?

C# 尴尬吗? 如果做不到老大就尴尬,那么 golang 应该跟着一起尴尬吧? golang 在哪个领域做到老大了? 高性能服务器依然是 C++ 为主流,复杂的大规模服务 Java 是主流,请问你 golang 算老几?

说句不好听的,能用一门语言解决问题,为什么要用多门语言? C# 能搞定 PC 端,移动端,服务端,浏览器端,为什么要多搞几个人?

当然啦,我也不是介意多学 几门语言,然而学了几门语言之后还想一头扎进 golang 的话,那真是没悟性。
jarlyyn
2017-02-08 13:07:42 +08:00
@noli

我认为语言之间当然没有优劣之分,只有适合不适合。

部署和 golang 比,非常难。

能用多门语言。为什么要用一门?好好写过程序就知道了,一门语言搞定所有,大概你一个 shell 能搞定的事情也准备起个 c#?问得出这个问题的绝对属于思路精奇啊。

c#作为一个 java 的 copy 者和竞争者,现在混成这样还不尴尬?
noli
2017-02-08 13:15:30 +08:00
@jarlyyn c#是 copy java 这样的话你也说得出,怪不得你认为语言没有优劣之分。

你自认为是码农就算了,不要把所有研究编程语言理论抽象符号运算等等问题的人当成是没事找事干。

降维攻击你赢了
hjc4869
2017-02-08 13:17:01 +08:00
@jarlyyn .NET Core 直接 publish 一个目录就能拷到 Linux 下运行,环境也不需要装。没看出来比起 golang 哪里“非常难”了。
jarlyyn
2017-02-08 13:18:34 +08:00
@noli

先说是不是,再说为什么。

你让为不是,就说明吧。
gamexg
2017-02-08 13:19:00 +08:00
@noli 多年没接触 c# 了,现在 mono 生产环境工作正常吗?图形界面能够在 linux 下工作了吗?如果.net linux 支持做好就非常棒了。
.NET 的问题感觉出在微软主导,我记得当时 mono 还被告了,要求贡献 mono 代码的人不能看过 .NET 的反编译。这么做使人对 .NET 跨平台兼容没信心,不知道什么时候 mono 就被微软搞死了。


没有泛型支持一直不是优点, go 官方打算加泛型,结果因为历史遗留问题很难加...

另外错误部分也比较坑,像是标准库网络错误,想要确定具体的错误类型居然要用字符串查找...

个人感觉 go 适合服务端编程,写起来很省心,没有回调地狱模式问题。另外写一些小的服务器工具也是合适的,但是图形界面部分不好用,或者说是我没接触 go 图形界面编程。
hjc4869
2017-02-08 13:22:14 +08:00
@gamexg 然而现在 Xamarin(mono)都被微软收购了,开发速度、代码质量在过去一年内也有显著的提升(虽说貌似有大把大把地抄微软开源的 .NET Core 和 .NET reference source ),你还觉得它会死吗?
noli
2017-02-08 13:22:47 +08:00
@jarlyyn 那你说 linq 是抄了 java 的什么, async await 抄了谁, yield return 又抄了 java 哪些特性?
jarlyyn
2017-02-08 13:23:16 +08:00
@gamexg

C#和 mono/.net 是两个问题。

图形界面不是 C#原生的内容,用 gtk#/qt 之类的跨平台是没什么问题的。 mono 刚出来的时候做跨平台的 ui 程序就很容易没什么问题。
jarlyyn
2017-02-08 13:27:22 +08:00
@noli

说的出这些话的还好意思说什么降维攻击?

看清楚我原话了吗?

Copy 和竞争者。

c#和 JAVA 的关系,和语言中的那些细节有什么关系?

谁关心语言的细节了?正常人都是关心的应用场景,谢谢。
noli
2017-02-08 13:34:13 +08:00
@jarlyyn 无耻之尤。 我说了 C# 里面有 而 Java 没有的东西来证明非 copy ,你却跟我说不关心细节~ 那你 golang 不也是 copy C 语言吗,谁关心语言细节了?

关心应用场景?好啊,那你说说 golang 怎么写 各种平台上的 GUI 应用啊?
gamexg
2017-02-08 13:39:02 +08:00
@hjc4869 Xamarin 有印象,记得看 keepass android 源码时发现的,当时想编译下 keepass 发现连免费试用都没有就没再看。现在看好像有免费社区版了。 当时 keepass 的几个实现大部分都是 .NET 的实现,唯一一个纯 java 的实现比.NET 的实现慢了很多...

@jarlyyn 问题是一般 vs.net 就用 windows 的实现,后期再改好麻烦...

现在 .NET 小图形界面做 windows + linux + macos 跨平台用哪个方案方便?
所谓的图形界面就是封装一个控制台程序,只用有启动、停止、重新启动按钮外加重定向控制台输出到图形界面文本框。
是不是 mono+aot 后就不用部署 .net 运行时了?
jarlyyn
2017-02-08 13:39:05 +08:00
@noli

golang 和 C 的应用场景不一样啊。

当然, golang 不是一直目标是 Better C 么。有谁说 golang 和 C 是没关系的么?不是都在把 golang 往 C 身上靠的么。到底是谁无耻,呵呵。

其次。

撇开那些绑定库不提,我一贯喜欢丢个 webkit 库直接用 Html 写,有什么问题么?

连 js 都能用来写各种 gui 程序了(比如 vscode,atom )

你到底在想啥?
jarlyyn
2017-02-08 13:42:10 +08:00
@gamexg


可怜我只写过 Mono devaloper 的 gui 到 win 上用,没怎么写过 win 下的 GUI 程序。 windows 下用 c# 主要还是网络相关的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/338929

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX