十分钟入门Go语言
本文永久链接 – https://tonybai.com/2023/02/23/learn-go-in-10-min 本文旨在带大家快速入门Go语言,期望小伙伴们在花费十分钟左右通读全文后能对Go语言有一个初步的认知,为后续进一步深入学习Go奠定基础。 ...
本文永久链接 – https://tonybai.com/2023/02/23/learn-go-in-10-min 本文旨在带大家快速入门Go语言,期望小伙伴们在花费十分钟左右通读全文后能对Go语言有一个初步的认知,为后续进一步深入学习Go奠定基础。 ...
本文永久链接 – https://tonybai.com/2022/09/10/an-intro-of-govulncheck 2022年9月7日,Go安全团队在Go官博发表文章《Vulnerability Management for Go》,正式向所有Gopher介绍Go对安全漏洞管理的工具和方案。 在这篇文章中,Go安全团队引入了一个名为govulncheck的命令行工具。这个工具本质上只是Go安全漏洞数据库(Go vulnerability database)的一个前端,它通过Go官方维护的vuln仓库下面的vulncheck包对你仓库中的Go源码或编译后的Go应用可执行二进制文件进行扫描,形成源码的调用图(callgraph)和调用栈(callstack)。 ...
本文永久链接 – https://tonybai.com/2022/03/12/dependency-hell-in-go 如果所有Gopher都抛弃GOPATH构建模式,拥抱Go module构建模式;如果所有legacy Go package作者都能为自己的legacy package加上go.mod;如果所有Go module作者都严格遵守语义版本(semver)规范,那么Go将彻底解决“依赖地狱”问题。 ...
Go语言自诞生以来,一路走到今天已经经历了11个年头了。其包依赖管理机制也从无到有,从vendor演化成了如今的Go module。Go module从Go 1.11进入gopher们视野,到目前的Go 1.15,其改进和优化一直在持续。在即将到来的Go 1.16中,Go module将成为默认包依赖管理模式(即默认GO111MODULE=on)。但即便如此,我们在进行go module的实践过程中依然还会遇到一些“棘手”的问题,本文就将针对一个Go module实践中的具体问题做深入描述,并告诉你目前可用的最佳解决方案(也许在go module的后续演进过程中可能会有更好的解决方案或干脆消除掉这个机制上的问题)。 ...
一. 介绍 每个依赖管理解决方案都必须解决选择依赖项版本的问题。当前存在的许多版本选择算法都试图识别任何依赖项的“最新最大(latest greatest)”版本。如果您认为语义版本控制(sematic versioning)将被正确应用并且这种社会契约得到遵守,那么这是有道理的。在这样的情况下,依赖项的“最新最大”版本应该是最稳定和安全的版本,并且应与较早版本具有向后兼容性。至少在相同的主版本(major verion)依赖树中是如此。 ...
写在Go语言开源十周年的日子 by Rob Pike 近期,有人对科学结果的可重现性进行了讨论,并得出了一些让人沮丧的结论。一项研究表明:这种可重现性只有62%。 在某些领域,情况可能更糟。任何依赖于计算的结果都面临着其编程环境不断变化的巨大风险:十年前编写的程序如果没有更改,今天构建成功的机会几乎微乎其微,更不用说运行或正确运行了。 ...
包管理是Go一直被诟病做得不好的功能之一。先前版本(go 1.11之前)的主要缺点之一是go get是缺乏对依赖包版本的管理和对可复制构建(reproducible build)的支持。Go社区已经开发了一些包管理器和工具作为版本化包依赖的事实标准解决方案,如glide,dep以及一些辅助工具等。 ...
自2007年“三巨头(Robert Griesemer, Rob Pike, Ken Thompson)”提出设计和实现Go语言以来,Go语言已经发展和演化了十余年了。这十余年来,Go取得了巨大的成就,先后在2009年和2016年当选TIOBE年度最佳编程语言,并在全世界范围内拥有数量庞大的拥趸。不过和其他主流编程语言一样,Go语言也不是完美的,不能满足所有开发者的“口味”。这些年来Go在“包依赖管理”和“缺少泛型”两个方面饱受诟病,它们也是Go粉们最希望Go核心Team重点完善的两个方面。 今年(2018)年初,Go核心Team的技术leader,也是Go Team最早期成员之一的Russ Cox在个人博客上连续发表了七篇文章,系统阐述了Go team解决“包依赖管理”的技术方案: vgo。vgo的主要思路包括:Semantic Import Versioning、Minimal Version Selection、引入Go module等。这七篇文章的发布引发了Go社区激烈地争论,尤其是MVS(最小版本选择)与目前主流的依赖版本选择方法的相悖让很多传统Go包管理工具的维护者“不满”,尤其是“准官方工具”:dep。vgo方案的提出也意味着dep项目的生命周期即将进入尾声。 ...
我有一个习惯,那就是随时记录下编程过程中遇到的问题(包括问题现场、问题起因以及对问题的分析),并喜欢阶段性的对一段时间内的编码过程的得与失进行回顾和总结。内容可以包括:对编程语法的新认知、遇坑填坑的经历、一些让自己豁然开朗的小tip/小实践等。记录和总结的多了,感觉有价值的,就成文发在博客上的;一些小的点,或是还没有想清楚的事情,或思路没法结构化统一的,就放在资料库里备用。“写Go代码时遇到的那些问题”这个系列也是基于这个思路做的。 ...
本文是首发于个人微信公众号的文章**“TB一周萃选[第10期]”**的归档。 这个世界上最危险的毒药,就是成就感。而解药就是每晚都想一想,明天如何做得更好。 – 英格瓦坎普拉德,宜家创始人 2018年元宵节已过,这个传统意义上的年就算真的过完了,我们的那颗有些闲散、有些懈怠的心需要收一收,是时候为2018年的“事业”做些规划,从2018的起跑线上起跑出去了。就连现在的孩子,在开学第一课时都要对自己的寒假生活做生动的回顾并且对新学期给予展望了。 ...