我是一名学习 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/