Go: 关于锁的1234 (www.felix021.com)

【简介】

其实锁很适合用来做套题,比如可以这么切入:sync.Mutex 是悲观锁还是乐观锁?

有些候选人不了解它们的区别,回答靠猜,缺乏逻辑以至于我都记不住。虽然这只是一个概念性的知识,但是却很能反映候选人的工作经验,比如读多写少的并发场景,乐观锁可以减少加锁冲突带来的开销。

当然大多数人还是知道的,于是可以继续问:你有了解过锁是怎么实现的吗?

很多人都能想到:维护一个初值为 false 的变量,当一个线程加锁成功的时候,将它置为 true ,就可以保证其他线程无法再获取。

逻辑是没错,但真正的问题是:两个线程同时检查,发现它的值都是 false ,如何保证只有一个线程会把它置为 true 呢?

这样的提问让不少候选人意识到,自己其实并没有真正理解锁。

点击查看全文 >>

@技术头条 2021-06-13 23:27分享 / 原作者微博:@Slyar / 0个评论
赞过的人: IT技术博客大学习
要不要再学学下面的文章?
Go语言将成为恶意软件开发者的首选 (mp.weixin.qq.com)
自从 2012 年发现了第一个使用 Go 语言编写的恶意软件之后,Go 语言就在恶意软件领域渐渐流行起来了。2019 年 7 月,Palo Alto Networks 发布了一份使用 Go 语言编写的恶意软件分析报告。报告发现,2019 年以前使用 Go 语言编写恶意软件是一件罕见的事情,但到了 2019 年,这种情况每天都会发生,2017 年到 2019 年,基于 Go 语言的恶意软件的样本数量增加 1944%。在这些恶意软件中,92% 是针对 Windows,4.5 是针对 Linux,3.5% 是针对 macOS。
by @code小生 2021-09-20 11:15 分享 查看详情
私有化仓库的 GO 模块使用实践 (zhuanlan.zhihu.com)
GO 在 1.11 版本开始引入 Module 的特性;1.13 版本引入 Module 校验和检查,加强了 Module 的安全性;现在的 1.16 版本已经默认使用 Module 模式。日前 GO 团队在博客上表明,将在 1.17 版本时删除对 GOPATH 的支持……
by @又拍云 2021-07-02 14:28 分享 查看详情
开箱即用的微服务框架 Go-zero(进阶篇) (zhuanlan.zhihu.com)
本文以 blog 的网站后台为例,着重介绍一下如何使用 Go-zero 开发 blog 的用户模块。

用户模块是后台管理系统常见的模块,它的功能大家也非常熟悉。管理用户涉及到前端操作,用户信息持久化又离不开数据库。所以用户模块可谓是 "麻雀虽小五脏俱全"。本文将详细介绍一下如何使用 go-zero 完成用户模块功能,如:用户登录、添加用户、删除用户、修改用户、查询用户 等
by @又拍云 2021-06-30 10:37 分享 查看详情
go-zero:开箱即用的微服务框架 (zhuanlan.zhihu.com)
go-zero 在设计时遵循了 “工具大于约定和文档” 的理念,所以 go-zero 包含极简的 API 定义和生成工具 goctl,可以根据定义的 API 文件一键生成 Go、iOS、Android、Kotlin、Dart、TypeScript、JavaScript 代码,并可直接运行。
by @又拍云 2021-06-29 14:16 分享 查看详情
Go反模式之越俎代庖 (colobu.com)
反模式(anti-pattern或antipattern)又叫做反面模式,指的是在实践中经常出现但又低效或是有待优化的设计模式,是用来解决问题的带有共同性的不良方法。Andrew Koenig在1995年造了anti-pattern这个词,灵感来自于GoF的《设计模式》一书。

按《AntiPatterns》作者的说法,可以用至少两个关键因素来把反面模式和不良习惯、错误的实践或糟糕的想法区分开来:
1、行动、过程和结构中的一些重复出现的乍一看是有益的,但最终得不偿失的模式;
2、在实践中证明且可重复的清晰记录的重构方案;
by @技术头条 2021-05-27 08:02 分享 查看详情
用Go撸一个二叉搜索树 (colobu.com)
前几天Redis的作者antirez说他朋友面试的时候考到排序问题,然后他说要是他也会考实现一个二叉搜索树,我说在中国某公司,据说面试直接就撸一个红黑树。不是说你技术渣,试问在座的各位有几个现在直接裸写出红黑树?

红黑树太过偏门,但是常用的二叉搜索树你能写出来吗?快排呢?堆排序呢?
by @技术头条 2021-05-27 07:54 分享 查看详情
踩坑记: Go 服务灵异 panic (www.felix021.com)
这个坑比较新鲜,周一刚填完,还冒着冷气。在字节跳动,我们线上服务的所有 log 都通过统一的日志库采集到流式日志服务、落地 ES 集群,配上字节云超(sang)级(xin)强(bing)大(kuang)的监控能力,每一条 panic log 都可以触发一个打给值班同学的电话。
by @技术头条 2021-05-27 07:53 分享 查看详情
[译]Go正则表达式示例 (colobu.com)
在这篇文章中,我会介绍如何在Go语言中使用正则表达式。Go标准库本身就包含正则表达式库regexp。

一个正则表达式(regex)是一个字符串,定义了一种搜索模式。你可以很容易的使用正则表达式进行搜索、替换、抽取、和模式匹配等操作,使用一行代码就可以干普通多行的事情。

Go标准库使用RE2语法,RE2语法也是Python、C和Perl使用的正则表达式语法。
by @技术头条 2021-05-27 07:12 分享 查看详情
Go: 基于 apitest 做handler层单元测试 (wklken.me)
原先使用 postman + newman 的方式做的 API 功能测试,这种方式不完全是API层的单元测试, 预先配置好数据库/初始化好数据后, 直接通过API调用, 判定响应值是介于单元测试 + 集成测试 之间的一种测试, 但是既不是完备的单元测试, 也不是完整的集成测试。

好处:
1、简单方便, 在本地开发调试API时, 就能将调试请求直接转为测试用例。

缺点:
1、难以维护: 更新API/增加API时, 未实时同步更新测试用例;
2、变更上层协议时, 例如middleware, 所有case需要改违背Isolate原则: 无法独立, 每个case运行时, 前面执行的数据会影响后面执行的数据;
3、每个case都需要考虑规避之前case的数据影响缺乏完备性: 一个API一般只构造一个失败, 一个成功两个Case。
by @技术头条 2021-05-26 22:43 分享 查看详情
Python 之父对 Rust、Go、Julia 和 TypeScript 的看法 (linux.cn)
Python 之父对 Rust、Go、Julia 和 TypeScript 的看法

Python 之父 Guido 在最近一次新采访中分享了他对其它编程语言的看法,其中有些很有趣:

Rust 在一个特定的领域真正改进了 C++,它使绕过编译器的检查变得更加困难。当然,它以一种近乎完美的方式解决了内存分配问题。

在所有的新语言中,Go 可能是最像 Python 的 —— 或者至少是在通用的新语言中。

Julia 有太多的细节看起来与 Python 非常相似。Julia 会在某个小众的地方是优越的,因为它的编译器为你优化了代码,而 Python 可能永远不会这样。

TypeScript 做了一些 Python 仍在等待解决的事情。我们正在向TypeScript学习。听起来 TypeScript 也在向 Python 学习,就像 JavaScript 在一些领域向 Python 学习一样。
by @技术头条 2021-05-26 22:33 分享 查看详情