go - 试图找到这个 perl 数组的 golang 等价物

标签 go

我是一名学习 go 的 perl 脚本编写人员。在 perl 中,无需逗号和引号即可轻松创建数组,例如:

my @array = qw/
Hello
World
Won't
you 
be 
my 
friend
/;

golang 是否提供这种简单性?还是我必须使用括号?

最佳答案

IMO,在 Go 中形成 array slice 的唯一正确方法是:

slice := []string{"Hello", "World", "Won't", "you", "be", "my", "friend"}

这是创建字符串 slice 的标准方法。它是 100% 可读的。它没有任何惊喜。

通过比较,IMO,在 Perl 中形成该数组的唯一正确方法是:

my @array = ( "Hello", "World", "Won't", "you", "be", "my", "friend" );

qw 运算符虽然在入门的 Perl 程序员中广为人知,但并不直观。是的,它可以让您节省一些击键次数。但是代码应该是为了可读性而不是可写性而编写的。据一些估计,大多数代码被阅读的次数比编写的多 10 倍。在某些情况下,它的阅读次数可能是其编写次数的数百或数千倍(想想核心库组件)。那么,到底为什么要牺牲可读性来节省几次击键呢?

即使您认为 qw 在 Perl 社区中被广泛理解以证明它在 Perl 中的使用是合理的(一个强有力的案例可以),这个论点肯定是不会延续到 Go 中。 Go 厌恶聪明的捷径,有利于代码的可读性。

当然有“聪明”的替代方案,例如@CeriseLimón 的回答中提供的替代方案,但它们会降低可读性。如果我在阅读某些代码时在该上下文中遇到 strings.Fields,它会中断阅读代码的流程。我不得不停下来思考“为什么作者要使用这个?这里有什么特殊情况?为什么不能使用标准的 slice 声明?”然后一两分钟后,我可能会意识到“作者只是无缘无故地太聪明了。Pfft”,然后我不得不回到我的代码阅读中,并重新跟踪我的步骤以重新获得流程.

聪明是好的、可读代码的敌人。

关于go - 试图找到这个 perl 数组的 golang 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48313563/

相关文章:

go - 接口(interface)类型转换不起作用

go module @latest 找到但不包含包

tensorflow - 在项目中使用go模块时如何导入tensorflow go包?

unit-testing - 在 golang 单元测试中模拟特定的错误类型

go - golang 中的生产者消费者

go - 如何在 TOML 中定义 map ?

go - 将字符串(键)映射到数字(或任何数据)

http - 如何使用RoundTrip跟踪请求大小?

go - 在中间件中重写内容长度

go - 使用 go channel 使结构线程安全