返回 登录
1

6个你应该使用也可能还未使用的Go语言技巧

原文:6 Go Tips You Should (probably not) Use.

作者:[Ralph Carmichael]

翻译:Diwei

译者注:本文主要介绍6个你应该使用也可能还未使用的Go语言技巧。还使用一个非常有趣的例子去说明方案自动化的合理性。以下为译文

1.所有内容使用Unicode标识符。

如果您访问了Go tour的首页,您可能知道就会知道Go支持使用Unicode字符作为标识符。但是您是否考虑过使用Unicode可以节省多少磁盘空间。

使用上面所示的源代码保存为utf - 8编码,英语字符串“people”由6个字节(0x70,0x65,0x6F,0x70,0x6C,0x65 }表示),而汉字“人”,根据谷歌翻译,“人”可以用三个字节{ 0 xe4 0 xba 0 xba }。这样使用标识符就节约了三个字节。假设您使用该标识符至少90万次,那您就可以将莎士比亚的整个作品存储在磁盘上!

当然,我虽然不是历史学家,但古埃及人用象形文字记录信息,并成功建造了巨大的金字塔。巧合吗?我认为不是。

如果你能从这(U + 13000 - U + 1432 f)找到一个字体支持他们,那么你甚至可以使用埃及象形文字!

2.使用内置的打印功能!

是否厌倦了用“fmt”来编排你的代码输入?或者在你对fmt包唯一调用的地方删除后,出现’imported and not used: “fmt”‘这种编译错误?其实你只需使用内置的打印功能就可以了!

现在,当您开始使用这些内置的程序,它将发送给您第一个pull请求,此时您一定会得到一些响应:


(文档里说:永远不要使用!这只用于调试,不能保证留在语言中。)

我只能说:别担心这些人,他们是我们在地下社区里所谓的“纯粹主义者”。他们是同一些人,一边说Go完全没有泛型,一边继续告诉你,当你遇到需要泛型的问题时,你可以使用interface{}。

3.使用interface{}

首先,Go语言是完全没有泛型的。但是,如果遇到需要泛型的问题,比如可以将uint和int类型加在一起的函数,那么只需通过interface{}传递参数,并执行类型断言就可以了。

无论何时,我建议通过interface{}来传递参数,因为它允许您稍后为了支持更多类型来扩展函数。

4.用struct替换所有struct命名的结构体。

上述代码已经清晰明了,我不需要在这里解释太多。一种less类型名称=你必须维护,记录和处理一种less类型。

5.猴子补丁-让我们获得超能力

(用来在运行时动态修改已有的代码,而不需要修改原始代码。)

有时内置函数和标准包是不够的。你想过滤掉一个不断调用fmt.Println的包吗?或者当fmt.Println调用的时候,你想要制作一个可输入的包用“鸟人”替换“people”这个词吗?幸运的是,有一个简单的库(github.com/bouk/monkey)可以做我们想做的事情!用这个在GO中获得超能力!

不幸的是,它在Windows上不起作用。虽然,它应该很容易添加支持,只是使用VirtualProtect函数而不是mprotect。

5.开心的使用它。

没有人喜欢无聊的老代码,虽然它很容易阅读和理解。让我们找些乐子,给读者一个挑战!在这里抛出一些运算符,有一个八进制或0002。向他们展示你的力量吧!

您知道您可以创建一个类型,它是指向类型本身的指针的指针吗?

找到一个可以展示的例子。

现在,我不能只推荐这些东西,而不展示它们在一个完整的程序中协同工作的情况,所以我需要举个例子。

我希望我的例子是在一个真实的世界,去解决一个人在某个地方的问题。我立刻想起了我在2015年在一篇关于gophercon的博客文章中提到的一个问题。

下面就是在我的博客中那个问题:


(GopherCon对少数民族演讲者没有配额。为今年的方案挑选的每位发言者都是按照他或她的建议的优点来选择的。但要明确的是,在考虑平等的建议时,我的政策是,妇女、有色人种和其他少数族裔的妇女优先于白人男性)

这大错特错!我确信,在这一点上,这篇文章的作者和读者都在思考同样的事情:“这是我的政策……”意味着他手动选择并没有方案自动化!

别担心,读者们,我和你们一样害怕。但是我们可以解决这个问题,我们可以让这个方案自动化!通过这段代码,首先我认为这是一个相当合理的方法,但它有一些问题。最大的问题是代码质量很差。有太多的命名结构,一个缺少interface{},在没有必要时使用fmt包等等,另外,谁想坐下来,写下每篇文章的数值价值,以及每个作者的性别,种族等? 我们需要更好的东西。

纸张自动分集度计量仪(P.A.D.M.E.))

上述这个目标很简单:当一个作者提交一篇论文时,他们也必须提交一串他们认为最能代表他们的表情符号。P.A.D.M.E.然后,将会根据表情符号的肤色、性别、种族和性取向的不同,得出一个多样性的分数,同时也考虑到ZWJ的肤色和性别修饰词。

The Go Playground (一个完全由Go代码组成和返回程序运行结果的web服务器),或者在b3log的web IDE上(b3log有语法高亮显示)试试。

得分有点复杂,但一般来说,以“女性,色彩和其他少数人数不足的少数民族”为原则,最后考虑白人男性。

因此,得分优先级是女性- >有色人种- >其他弱势群体- >白人男性。
我还没有尝试过所有的可能性,但在我做过的所有测试案例中,我还没有发现任何比白人异性恋男性更糟糕的事情(得分为- 5),也没有比穿深色皮肤的女同性恋(100分)更好的事情。它似乎很好地匹配了最初的构想。

随意使用这个程序,我觉得可以节省一些时间。 给您几个忠告:尽量小心ᛁ(U + 16C1)和ߊ(U + 07CA),

评论