美文网首页
Go的优势与不足

Go的优势与不足

作者: 陈光环_18 | 来源:发表于2020-10-18 13:51 被阅读0次

    编译时间:绝对快,可以确定要比 Rust 快得多。但实际上,它并没有我预期的那么快(对于中型到大型项目,我感觉它的速度只是与 C/C++ 相接近,或者稍微快一点。而我更加期待能够即时编译)。

    协程(goroutine)和信道(channel):值得称赞的是,Go 为生成协程和使用信道提供了轻量级的语法。尽管只是一个小细节,却使 Go 的并发编程体验比其他语言更优越,它真正揭示了语法的力量。接口:它们并不复杂,但是很容易理解和使用,并且在很多地方都很实用。

    if ...; ... { } 语法:可以将变量的作用域限制在 if 语句真的很好。这与 Swift 及 Rust 中的 if let 起着相似的效果,但用途更为广泛(Go 没有像 Swift 和 Rust 那样的模式匹配,所以它无法使用 if let )。测试和文档注释都很容易使用。Go 工具链非常友好:将所有东西都放在一个地方,而不需要在命令行上使用多个工具。

    拥有垃圾收集器(GC):不用考虑内存管理真的会使编程更加轻松。可变参数。

    nil 切片:要知道 nil、nil 切片和空切片三者都不相同,我敢保证我们只需要其中的两个,而不需要第三个。

    枚举类型并不是第一公民:使用常量模拟枚举让人感觉是一种倒退。不允许循环引用:这实际上限制了包在划分项目模块中的可用性,因为它变相鼓励了在一个包中堆积大量文件(或拥有大量零碎的小包,如果本该放在一起的文件四处分散,这也同样糟糕)。switch 允许出现遗漏匹配的情况。for ... range 语句会返回一对「索引/值」。要想只获取索引很容易(忽略值就好);但若要只获取值,则需要显式声明。在我看来,这种做法更应该颠倒过来,因为在大多数情况下,我更需要值而不是索引。

    语法:定义与用途存在不一致。编译器有时会很挑剔(例如,要求或禁止尾随逗号);通过良好的工具可以缓解这种困扰,但是有时仍然会产生一些恼人的额外步骤。使用多值返回类型时,类型上需要括号,但 return 语句中却不需要。声明一个结构体需要两个关键字(type 和 struct)。采用大写命名法来标记公共或私有变量,看起来就像匈牙利命名法那样,但更糟糕。隐式接口。我知道它也出现在我喜欢的东西中,但有时候它确实很惹人烦——特别是当你试图找出所有实现该接口的类型,或者哪些接口是为给定类型而实现的时候。你无法在不同的包中编写带有接收器的函数,所以即使接口是「鸭子类型」的,你也不能为其他包中的类型实现这个接口,这使得它们的用处大大降低。

    Go 缺少泛型和宏。

    相关文章

      网友评论

          本文标题:Go的优势与不足

          本文链接:https://www.haomeiwen.com/subject/bjhcmktx.html