马哥GO运维开发架构项⽬实战学习笔记-2020
Go语⾔作为后起之秀,在语⾔层⾯具有语法简洁、执⾏效率⾼的特点;相⽐之下,Java和Python、PHP都显得低效,C++则太过⿇烦,⽽Go则可以做到简单与⾼效兼顾。
go和java后端开发劣势
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 语⾔中的垃圾回收也是⼀个争议性话题。简单地说就是出于性能优化的⽬的会对默认值做出修改。
导⼊定义好的依赖项:所有依赖项都包含在⼆进制⽂件中,这样可以省掉协调⼆进制⽂件和依赖项的额外步骤。
学完后整体感觉不错,收获还挺多,如果有需要资源的伙伴,可以私信我~

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。