为 Java 开发者准备的 Go 教程 02:Java 有而 Go 无

大家好,我是 polarisxu。 Go 语言的设计是站在巨人的肩膀上的,它吸取了其他语言的优秀设计,同时摒弃了一些「不认可」的设计。同时,为了保持简单性,Go 的特性也比很多其他语言少。因此,Java 有一些特性,Go 没有。但没有,不代表不好。本文就看看具体有哪些。(当然,也存在 Go 有的特性,而 Java 没有) 1、多重赋值 Java 可以在一条语句中将同一个值分配给多个变量(很多 C 族语言

GitHub 发现了 studygolang 项目依赖的漏洞

大家好,我是 polarisxu。 今天打开 studygolang 项目的 GitHub 仓库主页,发现了一个醒目的提示: 即发现了潜在的安全漏洞。 之所以 GitHub 能够发现这个安全漏洞,前提是我之前进行了授权。之前我写过一篇文章:《重磅!GitHub 为 Go 社区带来安全支持》 ,没看过的可以看看。 查看 「Dependabot alerts」,发现是 tidwall/gjson 有漏洞: 点击可以查看该漏洞的详细信息: 所以,修复该问题很简单,在 studygolang 项

Typora 宣布收费后,这款开源 Markdown 编辑器火了

大家好,我是 polarisxu。 这几年,Markdown 写作不要太流行,包括一些社区也基本支持 Markdown 格式,包括 Go 语言中文网。GitHub 的评论也是支持 Markdown 格式,因此 Markdown 是每个程序员都应该掌握的。如果你从来没有使用过 Markdown,现在是时候尝试使用了。 Markdown 是一种纯文本格式,用来撰写结构化文档。由 John Gruber 在 2004 年创造。他用 perl 实现了第一个 Markdown 到 HTML 的转换器,迅速地在网络上普及开来

为 Java 开发者准备的 Go 教程 01:漫游了

大家好,我是 polarisxu。 在正式工作之前,一直使用 Java,虽然这些年对 Java 的关注变少了,但很显然,Java 用户群体特别大。不过,我也知晓,有不少 Java 用户在学 Go。我尝试写一系列文章,为 Java 开发者讲解 Go 语言。 这是第一篇,从大的层面简单对比下 Go 和 Java,算作是一次漫游。 整体上,Java 和 Go 之间有许多明显而微妙的区别,包括语言层面和运行时层面。我们这里主要在语

我的 2021 年终总结

大家好,我是 polarisxu。 元旦假期结束,2022 年工作开启,2021 年总结做了吗?今天我简单回顾下我的 2021。 年终总结,是对我自己的一个回顾,但发出来,我希望能够对大家有点帮助或启发。 这份总结主要会聊五个方面的内容: 写作 读书 理财 家庭 收获 01 写作 这里主要谈我的个人品牌公众号 「polarisxu」,而不是 「Go语言中文网」,Go语言中文网的年终总结见:Go

泛型版 singleflight:Go 中如何防止缓存击穿?

大家好,我是 polarisxu。 并发是 Go 的优势,但并发也需要很好的进行控制。标准库中有 sync 包,经常使用的功能有 sync.Mutex、sync.WaitGroup 等。其实,除了标准库,还有一个官方的扩展库,也叫 sync,其中有一个子包:sync/singleflight,专门做并发控制,比如防止缓存击穿。 01 从例子说起 看一个模拟缓存的例子,有如下代码: package main import ( "errors" "flag"

2021 年你写了多少代码?这个 Go 工具帮你统计

大家好,我是 polarisxu。 2021 年马上要过完了,一年下来,你写了多少代码?其中 Go 代码又有多少呢?虽然大家一般讨厌将代码行数作为考核业绩指标,但我们自己对一年的代码量有一个基本掌握还是挺有必要的。 如果你搜索,会发现代码统计工具有很多。比如 sloccount 、github.com/AlDanial/cloc 等,似乎大家很喜欢统计代码行数。当然,也有人直接使用 grep、awk 之

Go1.18 新特性:TryLock

大家好,我是 polarisxu。 我们知晓,Go 标准库的 sync/Mutex、RWMutex 实现了 sync/Locker 接口, 提供了 Lock() 和 UnLock() 方法,可以获取锁和释放锁,我们可以方便的使用它来控制对共享资源的并发控制。(其他语言,比如 Java 是有类似 TryLock 的功能的) type Locker interface { Lock() Unlock() } 但是锁被获取后,在未释放之前其他 goroutine 再调用 Lock 则会被阻塞住,这种设计在有些情况下可能不能满足需求。有时我们希望尝试获取锁,

Go 泛型入门教程

大家好,我是 polarisxu。 有泛型的 Go 版本 1.18 已经发布了 Beta1 版本,之前陆陆续续介绍了泛型,但可能有些人还是对 Go 泛型没有完整的了解,因此有这份入门教程。 01 准备工作 开始学习泛型之前,你应该安装 Go1.18 Beta1 或之后发布的版本,建议使用 goup 等版本管理工具 ,当然也可以直接通过 playground 来验证:https://go.dev/play/?v=gotip。 不过,本教程基于本地安装 Go1.18 Beta1 为例进行。

程序员瑞士军刀:各种结构的转换工具

大家好,我是 polarisxu。 上次推荐的 「Go网址导航」,其中收录了一项:转换器。 网址是:https://transform.tools/。 这是一个开源项目,项目地址:https://github.com/ritz078/transform,目前 Star 数 2.8k+。 这个网站将转换工具分成了几类: SVG HTML JSON JSON Schema CSS JavaScript GraphQL JSON-LD TypeScript Flow Others 其中有一些对 Gopher 比较有用,这里简单列举介绍下