经历Rust程序员的眼神:第一印象

预期课程的开始,“ Golang Developer”准备了有趣的材料的翻译。您对Go的第一印象是什么?




在过去的几周中,我已经能够在工作中使用Go我首先在一个或多或少的大型项目中使用了Go。在此之前,我在学习Rust的功能时阅读了很多有关Go的知识,并在示例和小程序上进行了实践,但是真正的编程是完全不同的事情。

我以为您可能会对我的印象感兴趣。我将尽量避免与Rust进行比较,但是由于这是我的主要语言,因此无法避免。我必须在对Rust产生强烈偏见之前警告您,但我会尽力做到客观。

总体印象


去编程很好。库提供了我所需的一切,而没有太多缺陷。学习也是一种愉快的经历-这是一种经过深思熟虑的实用语言。例如,如果您学习语法,您将看到许多其他语言的习语被迁移到Go。一旦掌握了Go部件,就可以轻松预测其功能。有了其他语言的一些经验,我可以在没有任何Google特殊帮助的情况下阅读和理解Go代码。

我注意到与使用C / C ++,Java,Python等相比,它减少了很多挫败感,并且提高了生产力。但是,Go仍然被视为这一代语言的一部分。他从他们那里学到了东西,我认为这可能是这一代人中最好的语言。但他绝对是这一代人的一部分。它代表的是渐进的改进,而不是根本上的新改进(应注意,这不是价值判断-渐进在软件开发领域通常是有益的)。一个很好的例子是nil:像Rust和Swift这样的语言摆脱了null范式,从而消除了一整类错误。Go降低了危险性:没有null值;nil和0的定界。但是基本思想仍然存在,还有常见的运行时错误,即取消引用空指针。

易于发展


Go非常容易学习。我知道这是一个广为传播的广告口号,但令我惊讶的是我能很快达到生产力水平。多亏了文档,工具和语言本身,我在短短两天内就开始编写内容丰富,易于提交的代码。

支持学习的几个因素:

  • 变小 许多语言都试图变得很小,而Go实际上是其中一种。(这主要是很好的,对此要求的纪律给我留下了深刻的印象)。
  • 标准库很好(同样也很小)。在生态系统中查找和使用库非常容易。
  • 该语言几乎没有其他语言。Go从其他既定语言中继承了许多位,对其进行了抛光和整洁地连接。他小心地避免了新颖性。


代码例程


Go代码会很快重复。它缺少诸如宏或泛型之类的任何机制来减少重复(接口适合抽象,但不适用于减少代码重复)。我经常积累大量除类型外相同的函数。

错误处理也有助于重复。许多功能具有if err != nil { return err }比原始代码更多的模板

有时会批评使用泛型或宏来减少代码例程,以牺牲其可读性为代价。但是对于Go,我不会同意他们的观点。复制和粘贴代码快速简便,但是阅读Go代码可能会令人沮丧,因为您必须忽略大部分代码或寻找细微的差异。

我喜欢什么


  • . ; Rust. , ( , C/C ++ , - ).
  • . Go — . , , , .
  • . , , .
  • if ...; ... { }句法。将变量范围限制为if语句主体的能力很好。这类似于Swift和Rust中的let let,但用途更广泛(Go没有Swift和Rust这样的匹配模式,因此let不能使用)。
  • 测试和停靠注释易于使用。
  • Go工具非常好-一次就可以放在一个地方,而无需通过命令行连接许多工具
  • 有现货的垃圾收集器(GC)!无需关心内存管理,确实使编程更容易
  • Varargs。


我不喜欢的


顺序无关紧要。

  • 无切片-无切片,无切片和空切片都是不同的东西。我非常确定您只需要其中两个,而不是全部三个。
  • 没有小学班。常量的使用是不寻常的。
  • . , ( , , , , ).
  • switch
  • for ... range /. ( ), . -, , .
  • :
    • .
    • ( , , ); , , .
    • , return.
    • (type struct).
    • public private. , .
  • . , , , , , , , .
  • 您不能在另一个程序包中用接收器编写函数,因此,即使接口是隐式键入的,也无法为更高类型的接口实现这些函数,从而使它们的使用率大大降低。

我已经在上面提到了泛型和宏的缺乏。

连贯性


作为语言开发人员和程序员,Go经常会遇到内置功能和用户可用功能之间的不匹配,这让我感到最惊讶。许多语言的任务是消除尽可能多的魔力并使内置功能可供用户使用。运算符重载是一个简单但有争议的示例。去有很多魔术!而且,您很容易陷入无能为力的境地,无法做内置的事情。

特别突出的一些要点:

  • , , .
  • for ... range , , .
  • , len append, , . . , Go !
  • . ==, , map, . .



Go是一种简单,紧凑且令人愉悦的语言。它有一些尖角,但大多数情况下都经过精心设计。他的学习速度非常快,并且避免了其他语言不具备的任何功能。

与Rust相比,Go是一种完全不同的语言。尽管它们都可以粗略地描述为C的系统语言或``替代品'',但它们具有不同的目标和应用,语言设计风格和优先级。垃圾收集确实有很大的不同。在Go中使用GC可使该语言变得更简单,更小,更易于理解。 Rust缺乏GC使其速度非常快(特别是如果您需要明显的延迟,而不仅仅是高带宽),并且提供了Go中无法实现的功能和编程模式(至少在不牺牲性能的情况下)。

Go是一种运行良好的编译语言。他快。Rust也可以编译,但是运行时要小得多。他非常快。假设没有其他限制,我认为在使用Go和Rust进行选择是在学习曲线更短和程序更简单(这意味着更快的开发)之间的折衷,对于Rust而言,这是更快的速度和更富表现力的系统类型(这会使您的程序更安全,并加快调试和故障排除的速度)。



翻译已经结束,我们邀请您参加免费的在线实践课程,您将学习如何在60分钟内从头开始创建经过全面测试的http服务,而无需第三方依赖。



All Articles