马哥GO运维开发架构项目实战学习笔记-2020

网友投稿 1132 2022-10-16

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

马哥GO运维开发架构项目实战学习笔记-2020

Go语言作为后起之秀,在语言层面具有语法简洁、执行效率高的特点;相比之下,Java和Python、PHP都显得低效,C++则太过麻烦,而Go则可以做到简单与高效兼顾。

Go语言是主打并发、为并发而生的,其出发点即是瞄准大数据+云计算时代背景下的高并发、分布式应用场景。

可以在不同平台直接编译生成可执行程序,基础内存占用很少,小应用占用几M大型应用占用个几十M就能很好运行,这使得golang可以在树莓派之类的小设备上很好的运行,这一点表现比java要好的多。

Go 语言为 SRE 带来的好处简单地说就是:简单、可靠、快速。

使用 Go 语言——无论你在构建什么,专注于手头的工作,不要操心那些工具。

简单可读性:Go 语言代码具有很高的可读性,即使有多个运维团队共享代码库,这些代码也很容易读懂,因为它们不管在哪里看起来都是一样的。可以使用 gofmt(内置的 linter)让代码变得更容易阅读。

内置了测试、分析和基准工具:为了遵循 Go 语言的最佳实践,你可能会进行 TDD(测试驱动开发)。你不一定需要使用断言,但如果你想要用它,随时都可以使用。测试、分析(CPU 和内存)和基准工具都是内置的,因此不需要学习新语言、新命令或使用新工具,并且还有一些很好的工具可用于可视化测试结果。

一个二进制文件搞定一切:Go 语言使用了静态链接,也就是说它不需要依赖外部库,不需要复制依赖项或操心导入问题。所有代码及其依赖项都在二进制文件中。而且,作为一个纯粹的同质环境,它不依赖语言版本和发布版本。

交叉编译:将所有东西塞进二进制文件中让事情变得简单了,而能够对其进行交叉编译则让事情变得更加简单:为了支持在不同的操作系统上运行二进制文件,只需要设置 2 个环境变量:GOOS和GOARCH。不需要虚拟环境、包管理器或管理依赖项。这是 CLI 提供的一项很棒的功能,实际上,一些流行的工具也在使用它,如 etcdctl、kubectl 和 docker。

组合,而不是继承:避免继承造成的混淆。

标准库:标准库中的很多软件包都是 Ops 工具(比如处理基于不同的协议——如 HTTP/HTTP2——的 Web 服务,以及文件处理:路径、下载、打开、进程、时间、json、正则表达式等)的构建块。不需要跟踪用于基本操作的标准包或外部软件,或者在这些包被弃用后切换到其他包。因为这些都在标准库中——它们得到了良好的维护,提供了良好的文档。虽然标准库不大,但对于 OPS/SRE 工程师来说已经很好用了。

可靠有指针,但没有指针算术:保持安全!

错误处理:明确规划错误,并将其作为值来对待,而不是抛出错误异常,从而让代码执行更加顺畅。

开源:Go 语言背后有一个强大的社区在提供支持,包括多年来使用 Go 语言的公司以及谷歌、微软、苹果等行业巨头(你知道 SpaceX 正在使用 Go 语言吗?)。

数据类型:Go 语言是类型安全和强类型的语言,这意味着对 int 进行字符串操作是不允许的,因为这样无法通过编译。基于数组类型构建的内存高效抽象的额外好处是让一些操作明显变快了。

快速快速编译和执行:如果有未使用的导入,编译器将运行失败。编译时间很短,得到的二进制文件很小。由于代码被编译为机器码,所以执行速度很快。想想通过 sed 或 bash 循环运行数百万个输入,如果使用 Go 语言会有多快?

垃圾回收:与很多其他语言一样,Go 语言中的垃圾回收也是一个争议性话题。简单地说就是出于性能优化的目的会对默认值做出修改。

导入定义好的依赖项:所有依赖项都包含在二进制文件中,这样可以省掉协调二进制文件和依赖项的额外步骤。

学完后整体感觉不错,收获还挺多,如果有需要资源的伙伴,可以私信我~

上一篇:网络干货,无论是运维还是开发都要知道的网络知识系列之(五)
下一篇:网络干货,无论是运维还是开发都要知道的网络知识系列之(三)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~