Go1.16 新特性:Go mod 的后悔药,仅需这一招

大家好,我是煎鱼。 前几天 Go 官方正式发布了 1.16 版本。从这个版本起,环境变量 GO111MODULE 的默认值正式修改为 on。 这也意味着 Go modules 将更进一步推进其业务覆盖面,有新老项目共存的小伙伴建议手动将 GO111MODULE 调整为 auto。 Go1.16 针对 Go modules 放出了一个新特性,能够让维护 Go mod 库的开发者拥有反复吃 “后悔药” 的权力,提醒开发者已发布的 “脏” 版本存在问题。 这个新特性,对于许多维护和使用公共库(开源、企业等)的小伙伴简直是一个小福音,建议大家都应该要了解这个知识点。 在接下来文章中将进行详细说明和介绍。

Go1.16 新特性:详解内存管理机制的变更,你需要了解

大家好,我是正在学习如何蒸鱼的煎鱼。 在前面 Go1.16 特性介绍的文章中我们有提到,从 v1.16 起,Go 在 Linux 下的默认内存管理策略会从MADV_FREE 改回 MADV_DONTNEED 策略。 这时候可能至少分两拨小伙伴,分别是: 知道是什么,被这个问题 “折磨“ 过的,瞬间眼前一亮。 不知道是什么,出现了各种疑惑了,这说的都是些什么。 灵魂拷问 你有没有以下的疑问,或者是否清楚: 文中所说的 MADV_FREE 是什么? 文中所说的 MADV_DONTNEED 是什么? 为什么特指 Go 语言的 Linux 环境? 为什么是说从 MADV_FREE改回 MADV_DONTNEED? 在今天这篇文章中我们都将进一步的展开和说明,让我们一同来了解这个改来改去的内存机制到底是何物。

Go1.16 新特性:快速上手 Go embed

在以前,很多从其他语言转过来 Go 语言的同学会问到,或是踩到一个坑。就是以为 Go 语言所打包的二进制文件中会包含配置文件的联同编译和打包。 结果往往一把二进制文件挪来挪去,就无法把应用程序运行起来了。因为无法读取到静态文件的资源。 无法将静态资源编译打包进二进制文件的话,通常会有两种解决方法: 第一种是识别这类静态资源,是否需要跟着程序走。 第二种就是考虑将其打包进二进制文件中。 第二种情况的话,Go 以前是不支持的,大家就会去借助各种花式的开源库,例如:go-bindata/go-bindata 来实现。 但从在 Go1.16 起,Go 语言自身正式支持了该项特性,今天我们将通过这篇文章快速了解和学习这项特性。 基本使用 演示代码: import _ "embed" //go:embed hello.txt var s string func main() { print(s) } 我们首先在对应的目录下创建了 hello.

Go1.16 即将正式发布,以下变更你需要知道

大家好,我是正在努力学习的煎鱼。 在前几天,Go1.16rc1 抢先发布了。结合常规的 28 发布规律,其将会在 2021.02 月份左右发布正式版本。 这次 Go1.16 也带来了一些新特性或变更。那么作为一个 Gopher,想必不能错过这次的更新。 今天这篇文章将会带大家了解一下 Go1.16 的几个需要关注的特性。 废弃 io/ioutil Go 官方认为 io/ioutil 这个包的定义不明确且难以理解。所以 Russ Cox 在 2020.10.17 提出了废弃 io/ioutil 的提案。 大致变更如下: Discard => io.

快报:正式提案将泛型特性加入 Go 语言

经历九九八十一难,多年的不断探讨和 Go 语言爱好者们在社区中的强烈关注,且 Go 官方在 2020 年不断放出消息。 总算在 2021 年 1 月 12 日。官方正式提出将泛型特性加入 Go 语言的 proposal 了,且最新的草案设计已经更新。 基本语法如下: func Print[T any](s []T) { // same as above } 其大体的概述如下:

推荐一个牛逼的技术社区!

相信我的读者中不少是 Go 语言的爱好者,又或是正在伺机而动。 今天要给大家所介绍的这个技术社区,就是由与 Go 语言有很浓厚的缘分的人所创办的。 他有如下几个业界标签: 早期的国内 Go 语言布道师。 早期在公司内大规模的推广和使用 Go 语言。 早期编写了一本 Go 语言图书:《Go 语言编程》。 现在是一家公司的 CEO。 近期在大力推广 Go+。 … 他还有非常多的标签,通过上述这几点,你是否猜到是谁了呢? 没错,他就是七牛云的 CEO 许式伟。 与 Go 语言的渊源 许式伟在早年离开盛大创新院。创办七牛云的时候,选择了 Go 这门还未发布正式版的语言。因为小众,许式伟开始有意识地培养 Go 中国社区。

拖更的 2020 年不一样

大家好,我是煎鱼。 万万没想到…想着写 2020 年总结,结果就到了 2021 年,不愧是只有 7s 记忆的博主 😂。 2020 年并不简单,这也是第一次在公开场合写个人向,并且还是年终总结,感慨颇多。 出书 今年(2020年)上半年几乎没有更新博客文章,当时还一口气退了一大堆技术交流的微信群。当时有不少朋友来咨询我怎么了,后面的事大家也就知道了。 蛰伏了将近 9 个月,出了人生第一本图书(简体+繁体): 本书已印刷三次,和编辑沟通了几次,现在 Go 语言还算小众(与 Java、Python 相比较),销量算是挺不错的了。 有一块比较遗憾,在初印有几个比较致命的印刷问题。后续在第二次印刷中解决了。此次只能说第一次写书经验不足,编辑也是,下次一定。 另外当时出书时与曹大聊过几次,他提到的出书后会遇到的所有烦恼我大多都遇到了,现实太真实,出书很理想。 其次写书并不赚钱,不要见面就问。更没有因此改变我的初心,依然是热爱分享知识的煎鱼。 未曾想过的第一个里程碑完成。 博客/公众号 后半年就开始陆续恢复博客的写作了,2020 年博客上共有 32 篇技术文章,加上图书的稿子一年总共写了 70+ 篇文章。

吐血整理 | 快速了解全球软件案例(Top100)

前几天,煎鱼去了趟北京,参加了为期三天的全球软件案例研究峰会(TOP 100)。 同时记了一些笔记,整理后分享出来,希望对大家有所帮助,拓展眼界非常重要。 内容比较多(已经精简过),大家可以挑自己感兴趣的学习,建议三连。 一级目录如下: 百度内部业务 ServieMesh 实践。 云原生开发平台在腾讯游戏运营中的实践。 快狗打车可持续交付实践。 网易数帆从微服务框架到服务网格架构平滑演进及最佳实践。 不破不立:企业级研发效能提升的创新实践。 自如云原生落地最佳实践。 研发效能度量的误区、体系化实践和效能提升案例。 京东 BDP 的全域监控、管控平台搭建实践。 构建发布效率从10分钟到秒级的提升 - 云原生下编程方式的探索和实践。 全面监控体系建设及智能监控的探索实践。 低代码技术在贝壳的实践。 百度内部业务 ServieMesh 实践 本场演讲内容主要为微服务到服务网格的过程。其中涉及百度在异构场景下的一系列演进和适配操作。 同时也能得知百度也是自己做了个 bmesh,自此概括几乎全一线互联网大厂,均为自研(或结合)ServieMesh。

Go 错误处理:用 panic 取代 err != nil 的模式

前段时间我分享了文章 《先睹为快,Go2 Error 的挣扎之路》后,和一位朋友进行了一次深度交流,他给我分享了他们项目组对于 Go 错误处理的方式调整。 简单来讲,就是在业务代码中使用 panic 的方式来替代 “永无止境” 的 if err != nil。这就是今天本文的重点内容,我们一起来看看是怎么做,又有什么优缺点。 为什么想替换 在 Go 语言中 if err != nil 写的太多,还要管方法声明各种,嫌麻烦又不方便: err := foo() if err != nil { //do something.

Go 并发:一些有趣的现象和要避开的 “坑”

大家好,我是煎鱼。 最近在看 Go 并发相关的内容,发现还是有不少细节容易让人迷迷糊糊的,一个不小心就踏入深坑里,且指不定要在上线跑了一些数据后才能发现,那可真是太人崩溃了。 今天来分享几个案例,希望大家在编码时能够避开这几个 “坑”。 案例一 演示代码 第一个案例来自 @鸟窝 大佬在极客时间的分享,代码如下: func main() { count := 0 wg := sync.WaitGroup{} wg.Add(10) for i := 0; i < 10; i++ { go func() { defer wg.