Golang的争议与事实解析
Golang的争议与事实解析 作为社区,我们如何看待这篇包含事实指控的文章(https://fasterthanli.me/blog/2020/i-want-off-mr-golangs-wild-ride/)?
这是一篇关于他不同意的一些决定以及一些设计不佳、行为古怪的包的抱怨。可能我觉得有趣的是,他对Go的不满在于它并非在所有极端情况或底层实现中都像宣传的那样简单,而解决方案却是Rust。好吧,就这样。
更多关于Golang的争议与事实解析的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
我大体上可以接受将路径作为字符串处理,尽管这带来了诸多限制。
然而,所有导入的这些包对我来说是个大问题。
大约一个月前,一位同事要求我在我们的代码仓库中添加一个谷歌云身份验证查询。结果下载了数十个包。我们的持续集成(CI)现在需要9分钟,而之前只需要4分钟。二进制文件的大小也从10M增加到了29M。所有这些仅仅是为了添加一个简单的查询……
这并不完全是语言本身的问题,更多是谷歌云代码仓库或工具链的问题。但这确实令人担忧。
我同意calmh的观点。我确实想学习Rust,因为我很好奇,渴望了解所有权模型和类型系统(我喜欢C#的泛型,希望它的模式匹配能更好;Rust似乎已经具备了这一点,等等)。话虽如此,我认为他对Go的抱怨就像所有其他关于“语言A比B好,因为它有特性X”的抱怨一样。
Rust有泛型,而Go没有。如果你的项目需要泛型(或者没有泛型会让你的项目变得太困难),或者过度依赖interface{},那么你需要重新思考你的问题,或者需要使用另一种语言。
在Rust中,文件元数据似乎只允许你检查或修改文件的只读标志,并且你必须使用特定于操作系统的包/模块/crate/无论它们叫什么,并使用编译时检查来访问特定于平台的元数据。我理解这种方法,但在用户代码中使用该API更复杂。对我来说,暴露一个API,在支持它的平台上实现它,在不支持它的平台上实现为无操作,这似乎并不更好,也不更差,而是“更简单”。🤷
如果你喜欢Rust,就用Rust。如果Go甚至不想像Rust一样,就不要因为Go的类型系统/功能集不像Rust而抨击它!我也可以轻易地说Rust的Arc类型把C++的unique_ptr语义搞错了!


