Go语言之于系统管理员

开发 项目管理
“就算我从来没有直接接触过Go并发原语,为了其部署的随意性,我确信我会用Go重写所有我的命令行程序。”这是我以前说过的话。我认为这句话值得写一篇更详细的博文。

“就算我从来没有直接接触过Go并发原语,为了其部署的随意性,我确信我会用Go重写所有我的命令行程序。”

这是我以前说过的话。我认为这句话值得写一篇更详细的博文。

NKOTB

大多深入了解我的人都知道关于我的两件事情:

  • 对技术决策,我是相当实用主义并有点保守的。
  • 我是一个语言旅行者

第二个是Bryan Berry给我贴的标签,引自一个FoodFight早期片段。

有趣的是,这两件事看起来是矛盾的。

我喜欢学习新的编程语言。这定期会给我带来不小的冲击,因为不是个科班的程序员。我没有去上大学学编程(实际上,我根本没有读大学)。我的IT职业生涯几乎100%集中于运维。所有我接触过的东西- QA、DBA、 DEV – 都是源于运维领域,用于满足某些运维操作上的需求。

因此,我惊讶地发现18年后,自己拥有ruby,python,perl,java的实践知识,并了解其他一些编程语言。我学习新的编程语言主要是因为“技痒”。

我就是在这种情况下,遇到了Go。

如果你没听说过Go,其实有无数的文章,博文和大量新的工具用Go写成。***的linux容器周边和新的部署模型就是基 于Go的。也有一些相当“大”的用Go编写的项目,如packer等。Mozilla正在用Go构建所有内部工具(据我了解到的是这样的),很多开发者也 在转向Go。

你需要知道的是,我并不会因为热度去学习编程语言。比如,我根本就不关心JavaScript和Node。起初,我对Go也没任何兴趣。我认为它只不过是Google的众多学术实验中的一个。何况,如果我要接触一个C风格的编程语言,为什么我不直接学习C语言呢?

实际上,我用这个路子尝试为StormPath写一个PAM模块。虽然也还满意,但项目最终很让人沮丧。

那,为什么开始用Go

我觉得再尝试Go的一个原因是Go似乎一直都在我周围。这至少给我带来一个竞争者。其次,我使用的部分工具是用Go编写的,我要修正一些这些工具的问题(尤其是这些工具是新项目,必然会有问题需要修复),我确实需要学习这们新的编程语言。

然而,一个工具把我推到了***一步 – etcd。

你自己可以通读etcd,如果你知道我关于 Noah的历史,你就明白为什么我对它如此感兴趣。

让我自己吃惊的是,我决定可能我自己也要用Go写很多工具。

关于实用主义

在Dell Enstratius,我的团队开发的所有内部工具都是用Python写成的。对我们而言,这是一个实用的选择:

  • 在我们产品支持的平台上Python的依赖最小(它也会在我们客户的系统上)。
  • 对新的开发者(我们团队确实有那么几个)来说,Python用正确的方式进行了严格规定。
  • 由于上一条,不管你的Python水平如何,你都可以经常审阅和学习别人的代码。

为什么我们不用Ruby?考虑到我个人Ruby技能更好并且我们内部也拥有一些Ruby经验。

  • 你看过Ruby发行版的状态么?
  • 我们不想和任何潜在的使用Ruby的客户工具冲突
  • Ruby对新手而言不够严格
  • 和我一样对Ruby熟悉的话,由于Ruby的灵活性和元编程,查看别人的代码会极其困难。

我们团队考虑了以上所有选项,我们全部同意使用Python。我着手写了一个访问我们API的库。这给我们构建工具提供了基础,同时也作为一个新工具参考项目(如测试,项目结构,可执行脚本等等)。

事情进展的很顺利,直到最近一个客户的情况发生。为了显而易见的原因,我们努力精简依赖。有几个库让这件事变得如此顺利- requests, envoy。我们也喜欢使用 Fabric来封装一些东西。

然后,我们遇到一个状况,一个客户拒绝我们引入外部的包。因此,虽然我们可以“半死”大部分我们的工具,有些事情就是不能工作。追踪传递的依赖真是痛苦。

这就是导致我上面陈述的原因。

Go构建工具

Go,虽然不像Python那么容易调试,也还非常容易调试。编译速度很快,测试速度也相当快。但依赖问题才是真正的杀手锏。Go根本就不存在依赖问题。我可以把我编译好的二进制文件任意移动而不出任何问题,也不需要安装运行时。在标准库中也有很多有用的东西。

我也可以在osx,windows或者linux上不做任何更改的编译相同的代码。这也比我们使用Python方便。

和我说的一样,虽然我现在写的工具一点也没用上Go的高级并发特性,但是Go确实拥有这个特性,如果我要用,还是很好的。

这不是一个转换语言的故事。

我们还没有转向用Go来构建工具,但我很可能会用的。我已经致力于用Go来写一个我们API的封装,因此我也可以重写其他一些工具。在依赖受限的系统上,这种做法还是很好用的。这就是这篇博文的重点所在。

如果你的工作和运维相关,学习Go没什么坏处。

语法简洁。C带来的头痛的问题基本都会消失不见。同时,你也不用担心系统的Python或者Ruby版本是多少。Go是 一个开发bootstrap工具的绝妙语言——因为bootstrap工具的运行环境没有任何安装好的依赖。如果你开始使用像docker, packer 或者etcd的工具,Go也会很有帮助。

试试Go吧。

原文链接:http://blog.lusis.org/blog/2013/08/11/go-for-system-administrators/

译文链接:http://blog.jobbole.com/45939/

责任编辑:陈四芳 来源: 伯乐在线
相关推荐

2012-06-06 10:41:37

系统管理员运维

2010-08-10 09:13:52

Unix系统管理员Ubuntu

2010-08-11 17:11:15

2019-09-09 14:45:29

系统管理员SRE

2010-05-06 18:07:33

Unix命令

2013-03-30 21:59:13

系统管理员必备工具iftop

2018-08-01 08:12:34

Linux管理员网络管理

2018-08-15 14:00:18

LinuxBash系统管理员

2013-06-26 09:29:30

系统管理员

2013-09-29 09:50:21

系统管理员Ubuntu JujuJuju

2010-04-12 09:33:58

系统管理员

2010-11-10 09:36:38

系统管理员守则

2011-10-20 10:29:22

VMwareVMworld虚拟化

2010-05-07 16:35:44

2019-08-13 19:34:45

容器镜像DockerLinux

2011-06-16 09:35:28

系统管理员iPad应用

2019-08-23 08:00:00

系统管理架构

2012-08-07 09:40:58

系统管理员职业生涯

2013-12-09 16:15:08

系统管理员WebminLinux服务

2009-10-22 16:53:08

点赞
收藏

51CTO技术栈公众号