站长8年前的Go代码竟然进入大厂的项目里了

大家好,我是 polarisxu。 在群里有一位大厂大佬发了这么一条信息: 有点惊住了! 这是我在 2013 年 1 月写的一篇关于 RSA 的文章:《GO加密解密之RSA》 ,没想到进入了大厂的项目里。只不过,这 CTRL + C、CTRL +V 有点小猛,邮箱地址直接进入了仓库。。。不愧是: 群友们很有才,说可以写一篇文章:当初写下的示例程序,已然在巨头大厂安稳运行 6 年,创造的价值数以亿记。 这件事还是有些

Go图书翻译:一个好消息,一个坏消息

大家好,我是 polarisxu。 看到广大 gopher 们的需求,昨天我发文宣布组织翻译《Practical Go Lessons》 这本书。发文后,有将近一百人要参与。感受到了大家的热情~ 昨天下午,我给作者发信息,请求授权我们翻译。昨天一天没有回应(虽然看到信息已读,但没有给我答复)。但我们觉得,大概率会取得授权,所以,昨天做好了准备工作:流程、规范等,并且大家觉得端午节假期可

不怕烂尾!决定组织翻译这本 Go 图书

大家好,我是 polarisxu。 前些天给大家分享了一本书:《Practical Go Lessons》 ,挺受欢迎,大家纷纷建议组织翻译。 实话说,我是担心烂尾的,因为之前组织过其他的,比如标准库翻译等,很多人都是一时热情,过些天就把这事忘得一干二净!最后想要有始有终,只能我自己慢慢收尾。 但看到大家的热情,我又觉得,也许这次大家能坚持呢?要不再试一次?大不了最后烂尾,

Rust 劝退系列 08:模式匹配

大家好,我是站长 polarisxu。 这是 Rust 劝退系列的第 8 个教程,探讨 Rust 中的模式匹配。 01 match 表达式 关于 match 表达式,很多其他语言并没有,比如 Go 语言。不过有些语言开始支持 match,比如 PHP 8.0 就有了 match 表达式。 一般地可以认为 match 和 switch 类似,所以 Rust 中没有 switch。 match 用于检查某个当前的值是否匹配一组/列值中的某一个。看一个具体的例子: fn test_match(number: i32)-> &'staticstr{matchnumber{// 匹配单个值 1=>{println!("One!");"One!"},// 匹配多个值 2|3|5|7|11=>"This is a prime",// 匹配

一本花了2.5年写成的Go免费在线图书

大家好,我是 polarisxu。 又一次为大家推荐 Go 图书,这是一本免费的 Go 语言在线图书:https://www.practical-go-lessons.com/。以下是该书的一个封面: 这本书采用渐进的方式讲解 Go 语言。作者还试图解释一些难以掌握的计算机科学概念,对于新人来说很有用。因此这本书对于那些没有计算机基础的人也有帮助。 我也写过书,也一直在坚持写文章,知

被黑惨了:一句话,说明自己会 Go,咋整?

大家好,我是 polarisxu。 今天在「Go语言中文网」微信群里有网友问了这么一个问题:一句话,说明自己会 go,咋整?一个哥们立马给出了一个回复,竟然无法反驳,感觉 Go 被黑的很惨?!(被黑的最惨的一次?!!) 关于 if err != nil 的调侃真的不要太多。这里列举几个: 1)之前发过一篇文章:写了50万行Go代码是一种什么样的体验? ,有人留言调侃说:有 10 万行是 if err != nil。。。

Go1.16 中的新函数 signal.NotifyContext 怎么用?

大家好,我是 polarisxu。 os/signal 这个包大家可能用的不多。但自从 Go1.8 起,有些人开始使用这个包了,原因是 Go1.8 在 net/http 包新增了一个方法: func (srv *Server) Shutdown(ctx context.Context) error 有了它就不需要借助第三方库实现优雅关闭服务了。具体怎么做呢? func main() { server = http.Server{ Addr: ":8080", } http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { time.Sleep(time.Second * 10) fmt.Fprint(w, "Hello world!") }) go server.ListenAndServe() // 监听中断信号(CTRL + C) c := make(chan os.Signal, 1) signal.Notify(c, os.Interrupt) <-c // 重置 os.Interrupt 的默认行为 signal.Reset(os.Interrupt) fmt.Println("shutting down gracefully, press Ctrl+C again to force") // 给程序最多 5 秒时间处理正在服务的

Go 1.17 新特性提前学之测试执行随机化

大家好,我是 polarisxu。 Go1.17 预计在 8 月份发布。目前 tip.golang.org 可以浏览 Go1.17 的相关内容,https://tip.golang.org/doc/go1.17 也有了 Go1.17 相关改动的部分文档。这段时间,我会陆续给大家分享 Go1.17 中相关的新特性,提前学习。。。好吧,提前卷了~ 今天先聊聊在测试中增加的随机化 flag:shuffle。 01 安装 tip 版本 由于 Go1.17 还未发布,因此为了体验它的新特性,我

Rust 劝退系列 07:流程控制

大家好,我是站长 polarisxu。 这是 Rust 劝退系列的第 7 个教程,探讨 Rust 中的流程控制。注意,跟其他语言一样,Rust 中有条件、循环,但没有 switch,而是有 match 模式匹配。 01 运算符 开始讲解流程控制之前,先补充一个知识点,那就是 Rust 的运算符。 Rust 支持算术运算符、关系运算符、逻辑运算符和位运算符 4 种,它们和其他语言没有什么不同,因此不细讲了,只提醒一点:Rust 中没有自

官方的 Go 多版本管理:使用和原理

大家好,我是 polarisxu。 有些人可能注意到,每次 Go 发布新版本,官方都会提供类似这样的升级截图: 这可以说是官方的 Go 多版本管理,也是升级 Go 的方式。今天就一起聊一聊这种多版本管理方式及其实现原理。(我之前介绍过一个第三方多版本管理工具 goup ,是我比较推荐的)。 注意,Windows 用户应该使用 WSL2。 01 为什么需要多个 Go 版本 有些人可能觉得没有这样的需求。实际工作中