大家好,我是煎鱼。 前几天 Go 官方正式发布了 1.16 版本。从这个版本起,环境变量 GO111MODULE 的默认值正式修改为 on。 这也意味着 Go modules 将更进一步推进其业务覆盖面,有新老项目共存的小伙伴建议手动将 GO111MODULE 调整为 auto。 Go1.16 针对 Go modules 放出了一个新特性,能够让维护 Go mod 库的开发者拥有反复吃 “后悔药” 的权力,提醒开发者已发布的 “脏” 版本存在问题。 这个新特性,对于许多维护和使用公共库(开源、企业等)的小伙伴简直是一个小福音,建议大家都应该要了解这个知识点。 在接下来文章中将进行详细说明和介绍。
大家好,我是正在学习如何蒸鱼的煎鱼。 在前面 Go1.16 特性介绍的文章中我们有提到,从 v1.16 起,Go 在 Linux 下的默认内存管理策略会从MADV_FREE 改回 MADV_DONTNEED 策略。 这时候可能至少分两拨小伙伴,分别是: 知道是什么,被这个问题 “折磨“ 过的,瞬间眼前一亮。 不知道是什么,出现了各种疑惑了,这说的都是些什么。 灵魂拷问 你有没有以下的疑问,或者是否清楚: 文中所说的 MADV_FREE 是什么? 文中所说的 MADV_DONTNEED 是什么? 为什么特指 Go 语言的 Linux 环境? 为什么是说从 MADV_FREE改回 MADV_DONTNEED? 在今天这篇文章中我们都将进一步的展开和说明,让我们一同来了解这个改来改去的内存机制到底是何物。
在以前,很多从其他语言转过来 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.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 官方在 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 年总结,结果就到了 2021 年,不愧是只有 7s 记忆的博主 😂。 2020 年并不简单,这也是第一次在公开场合写个人向,并且还是年终总结,感慨颇多。 出书 今年(2020年)上半年几乎没有更新博客文章,当时还一口气退了一大堆技术交流的微信群。当时有不少朋友来咨询我怎么了,后面的事大家也就知道了。 蛰伏了将近 9 个月,出了人生第一本图书(简体+繁体): 本书已印刷三次,和编辑沟通了几次,现在 Go 语言还算小众(与 Java、Python 相比较),销量算是挺不错的了。 有一块比较遗憾,在初印有几个比较致命的印刷问题。后续在第二次印刷中解决了。此次只能说第一次写书经验不足,编辑也是,下次一定。 另外当时出书时与曹大聊过几次,他提到的出书后会遇到的所有烦恼我大多都遇到了,现实太真实,出书很理想。 其次写书并不赚钱,不要见面就问。更没有因此改变我的初心,依然是热爱分享知识的煎鱼。 未曾想过的第一个里程碑完成。 博客/公众号 后半年就开始陆续恢复博客的写作了,2020 年博客上共有 32 篇技术文章,加上图书的稿子一年总共写了 70+ 篇文章。
前几天,煎鱼去了趟北京,参加了为期三天的全球软件案例研究峰会(TOP 100)。 同时记了一些笔记,整理后分享出来,希望对大家有所帮助,拓展眼界非常重要。 内容比较多(已经精简过),大家可以挑自己感兴趣的学习,建议三连。 一级目录如下: 百度内部业务 ServieMesh 实践。 云原生开发平台在腾讯游戏运营中的实践。 快狗打车可持续交付实践。 网易数帆从微服务框架到服务网格架构平滑演进及最佳实践。 不破不立:企业级研发效能提升的创新实践。 自如云原生落地最佳实践。 研发效能度量的误区、体系化实践和效能提升案例。 京东 BDP 的全域监控、管控平台搭建实践。 构建发布效率从10分钟到秒级的提升 - 云原生下编程方式的探索和实践。 全面监控体系建设及智能监控的探索实践。 低代码技术在贝壳的实践。 百度内部业务 ServieMesh 实践 本场演讲内容主要为微服务到服务网格的过程。其中涉及百度在异构场景下的一系列演进和适配操作。 同时也能得知百度也是自己做了个 bmesh,自此概括几乎全一线互联网大厂,均为自研(或结合)ServieMesh。
前段时间我分享了文章 《先睹为快,Go2 Error 的挣扎之路》后,和一位朋友进行了一次深度交流,他给我分享了他们项目组对于 Go 错误处理的方式调整。 简单来讲,就是在业务代码中使用 panic 的方式来替代 “永无止境” 的 if err != nil。这就是今天本文的重点内容,我们一起来看看是怎么做,又有什么优缺点。 为什么想替换 在 Go 语言中 if err != nil 写的太多,还要管方法声明各种,嫌麻烦又不方便: err := foo() if err != nil { //do something.
大家好,我是煎鱼。 最近在看 Go 并发相关的内容,发现还是有不少细节容易让人迷迷糊糊的,一个不小心就踏入深坑里,且指不定要在上线跑了一些数据后才能发现,那可真是太人崩溃了。 今天来分享几个案例,希望大家在编码时能够避开这几个 “坑”。 案例一 演示代码 第一个案例来自 @鸟窝 大佬在极客时间的分享,代码如下: func main() { count := 0 wg := sync.WaitGroup{} wg.Add(10) for i := 0; i < 10; i++ { go func() { defer wg.