上周的一天,我注意到我的TODO列表太大了,无法保存在我的记忆中,因此我开始寻找可以放入笔记的应用程序。 该应用程序的一个要求是,我可以在任何计算机上从命令行轻松访问它,并且注释将在所有计算机上都可用。 我找到了一些“不错”的应用程序,例如Todo.txt和Taskwarrior,但它们只是没有点击我。 所以我决定,嘿,为什么不自己写一个东西,同时学习一些新知识。

我已经从一位亲爱的朋友那里听说过Go编程语言(很久以前),但是从来没有真正去研究它。 我想着:“现在就像任何时候一样美好”,并前往互联网仙境,希望学习新的东西。
安装
Go的安装非常简单,您可以从https://golang.org/doc/install中找到所有最常用的操作系统的说明。 我主要在Ubuntu计算机上工作(无论在家里还是在家里),Go安装所做的是它在您的主目录中创建了“ go”目录。 这是目录,您将在其中找到源以及安装的其他go应用程序或软件包的可执行文件。 要在任何地方使用它们,您应该将〜/ go / bin添加到$ PATH环境变量中。
Go提供了一些工具,可使用单个命令“ go get ”轻松从github中获取软件包。 这将获取go软件包及其依赖项。 如果是应用程序,则默认情况下,该命令还将为您构建二进制文件到go / bin文件夹。 酷吧?
API规范
Go在标准库中内置了很多东西,您可以从Go网站上找到所有文档。 对规范及其工作方式也很感兴趣的是https://godoc.org/网站,该网站还托管位于标准库之外的软件包的API规范。 这也意味着,如果您正在编写一些开源Go,则已经包含了API规范的托管。
依赖处理
如果要在代码中使用其他包,则需要进行某种依赖处理。 刚开始引入依赖项时,我碰到了golang dep工具并以此开始。 后来我发现还有内置的依赖处理支持,称为Go模块,这似乎是正确的方法,因为您的源代码也可以驻留在$ GOPATH之外。 Go模块需要1.11或更高版本才能运行,因此,如果您要使用旧版本,则应检查go版本,如有必要,请更新或使用其他依赖项管理器。
实际编程
由于主要是编写C ++代码,因此Go的实际编程花费了一些时间进行调整。 例如,语法与C ++相当不同:
在Go中,它会翻译如下内容(不要介意它不是完美的C ++或Go;):
您可能会注意到在Go中:
- Main函数必须位于名为main的程序包中。 而且它没有任何参数
- 在为新变量赋值时,您无需知道其类型
- 使用指针或类的实例没有区别-您可以始终使用点访问这些
- 您没有类,但有结构。 结构的功能在结构本身之外定义
- 公共和私有功能和属性仅由首字母标识-大写表示公共,小写私有
- 函数可以通过设计返回多个值
- 结构没有构造函数
- 没有异常,但错误由返回值处理
- 使用它们之后也可以声明类型。 在C ++中,不能将NewNote函数移到类声明上方
可能需要一些时间来熟悉,但过一会儿便会像其他任何语言一样开始流行。 与支持异常的语言相比,使用Go进行错误处理尤其麻烦。
我真正喜欢Go的是编译器。 它告诉您许多有关代码的错误,例如未使用的变量或导入。 基本上,它会强制编写更多经过优化和简洁的代码。 它也非常快,这使开发变得更容易。
但是,等等,Go也不全是彩虹和独角兽。 我确实错过了一些功能(或者没有找到标准的库支持),例如通过键对地图进行排序,将字符串转换为uint类型而不需要从strconv进行不必要的强制转换等。迭代图:迭代顺序完全是随机的(您实际上可以在此处了解更多信息)! 使用新语言时,这类事情需要花费大量时间才能弄清楚。
虽然使用Go进行编码非常容易,但是我不需要或没有时间去学习一些东西,例如goroutine,通道,http功能,数据库连接,图像处理等。这些东西需要一些项目才能真正熟悉跟他们。
最后的话
我真的很喜欢Go。 实际上,我确实设法产生了我的TODO应用程序的工作版本(认为不完整)。 如果您有兴趣,请在此处查看。
下次启动新软件项目时,应考虑将Go作为您选择的语言。 它不能满足所有目的,但对于许多人来说是一个绝佳的选择。 如果没有其他问题,请尝试一下,看看您的感觉!