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 版本 有些人可能觉得没有这样的需求。实际工作中

Rust新书:给你一个劝退的理由

大家好,我是 polarisxu。 过去一段时间,我每周写一篇「Rust 劝退系列」,发现阅读量越来越低。于是我在思考,怎么能够调动大家学习的热情。思考再三,我决定试试这个办法! 最近看到机械工业出版社出了一本 Rust 新书:《Rust编程:入门、实战和进阶》,我看完目录,发现很符合我一直想要的。 我在学习 Rust 的过程中,发现目前市面上的 Rust 图书,内容组织方式和其他语言的图书不太一

周刊题解:常量表达式这个规则应该了解下

大家好,我是 polarisxu。 之前周刊题目正确率一直挺低的,于是我在「94期」出了一道简单的题目,如下: package main import ( "fmt" ) func main() { var ans float64 = 15 + 25 + 5.2 fmt.Println(ans) } 没想到,这道题的正确率也才 62%: 这篇文章就给大家讲解下这道题涉及到的常量表达式的一个知识点。 概念 常量表达式是指仅包含常量操作数,且是在编译的时候进行计算的。 而常量,在 Go 语言中又可以分为无类型常量和有类型常量,也可

盘点那些使用 Go 语言的国外公司

大家好,我是 polarisxu。 一直以来,各种语言都是国外大规模使用,但 Go 语言很不一样,国内更火。因为这样,有些人质疑:Go 也就国人瞎炒作,国外根本没啥公司用。真的是这样吗?今天就盘点一下那些使用 Go 的国外公司,看看他们的案例,希望对大家的技术选型有所借鉴! 为了更清晰,以下盘点进行了必要的归类。 01 技术平台公司 技术平台提供了一组加速应用程序开发的通用功能,因此可

编写了50万行Go代码是一种什么体验

大家好,我是 polarisxu。 今天看到一篇文章,分享给大家,看看写了 50 万行代码的 Gopher 对 Go 有什么感想。 先简单介绍下可汗学院(Khan Academy)。 这是一个非营利性组织,其使命是在任何地方为任何人提供免费的、世界级的教育。 全球有 6.17 亿儿童缺乏基本的数学和阅读技能。可汗学院是一个提供他们所需教育的非营利组织,因此需要大家的帮助,你的帮忙可以改变一个孩子的一生。 所

Rust 劝退系列 06:常量

大家好,我是站长 polarisxu。 这是 Rust 劝退系列的第 6 个教程,探讨 Rust 中的常量,因为 static 和常量有类似之处,因此一并探讨。(Rust By Example 中甚至将常量分成两种类型:const 和 static,我个人觉得常量是常量,static 修饰的是变量,不能算是常量) 01 常量 在 Rust 语言中,术语"常量"用于表示固定的值,比如 5 、-89、 I love Rust、3.14 等等。一

Uber 使用 Go 的规模这么大?!都自己定制的 Go 编译器了

大家好,我是站长 polarisxu。 今天看到 Uber 使用 Go 的情况,挺吃惊的,给大家分享下情况。 01 Uber 使用 Go 的情况 Uber 有数千个后端服务是使用 Go 实现的,它们运行在数百万个 CPU 内核上。因此,对于 Uber 来说,详细准确掌握 CPU 瓶颈至关重要。这不仅为了减少服务延迟,同时也能提高计算机运行效率。Uber 这个量级的规模,要求对代码和微观结构的影响有深入的了解。 02 定制 Go 编译器 其实说定制 Go 编译器