简单来看, go 语言想做一个 "更好的C" (类似 C++, D, Java, C# 等), 同时从 C, C++, Python, Java 等语言吸收了一堆乱七八糟的特性。 go 语法有一些简洁的进步, 也有许多恶心的退步。
C++, D, Java, C#
天下语言出自 C, Java 在虚拟机层面做了变革, go 则在代码编译链接层面做了变革。 go 必须拿到所有源码, 消除了二进制三方库, 采用源码级依赖, 对代码语义、组织等进行整体分析和考虑, 从而可以引入和重新定义一些高级语义, 代码编写可以更贴近高层抽象而不是底层细节, 这也是一种抽象层面的虚拟机。 开发工具链对源码可以有更好的分析和整体把握。 与 Java 不同, go 代码最终还是被编译组织成本地二进制文件, 而不是中间字节码。 清楚底层细节对 go 依然很有用, 比如指针, 这又是与 C 一脉相承之处。
go 的优势:
[]int{ 1, 3, 5, } map[string]int{ "a": 3, "b": 5, } Point{ X: 3, Y: 5, }
go 的吐槽点:
if err != nil
There was an error while loading. Please reload this page.