这里记录每周值得分享的 Go 语言相关内容,周日发布。
本周刊开源(GitHub:polaris1119/golangweekly),欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue 。
鉴于大部分人可能没法坚持把英文文章看完,因此,周刊中会尽可能推荐优质的中文文章。优秀的英文文章,我们的 GCTT 组织会进行翻译。
题图:黑白棋,Go 语言实现了这个小游戏
黑白棋,又叫翻转棋(Reversi)、奥赛罗棋(Othello)、苹果棋或正反棋(Anti reversi)。黑白棋在西方和日本很流行。游戏通过相互翻转对方的棋子,最后以棋盘上谁的棋子多来判断胜负。它的游戏规则简单,因此上手很容易,但是它的变化又非常复杂。有一种说法是:只需要几分钟学会它,却需要一生的时间去精通它。
这里有一个 Go 语言实现的黑白棋,地址:https://piccolo.click/。可惜源码没有开放,在 Web 上通过 WebAssembly 运行的。使用 Ebiten 2D 游戏库构建。
Piccolo 是一款以强大且具有竞争力的水平玩日本 Othello 战略游戏的 AI。Piccolo 结合使用 Negamax 深度优先搜索和 Alpha-Beta 修剪与启发式技术相结合来评估位置强度,并具有优雅的用户界面。
除了 Web 版本,还支持 Windows 和 Linux 客户端,不久会有 macOS 客户端。
以前没玩过,试完了几把,Level 2 级别的都输,AI 好强大还是我太菜?!
任务运行器,使用 Go 语言编写。类似 GNU Make,目标是比它更简单和易于使用。
这是官方提供的工具,用于生成 Badge 放在 README 中。比如 studygolang 源码的 Badge:。
很大可能使用方括号 []
,取消类型参数前面的 type 关键字,所有类型参数必须提供 constraint,引入 “any" 预声明标识符 (interface{} 的一个 alias)等。
type Vector[T any] []T
func Print[T any](s []T) { … }
func Index[T comparable](s []T, e T) { … }
曾几何时,语言的在线运行(Playground)似乎成了标配。确实,Playground 能够让我们可以快速试验一些想法。Go 语言在发布之初就提供了一个,这就是 https://play.golang.org。然而,由于众所周知的原因,我们访问不了。为了方便国内广大 gopher,我搞了一个国内镜像:https://play.studygolang.com,尽情使用、分享吧。
如果你还没在 error 上栽跟头,那么当你栽了跟头时才会哭着想起来,当年为什么没好好思考和反省错误处理这么一个宏大的话题。
3、如果你只知道 go test 用于单元测试就太 LOW 了
go test 命令提供了许多出色的功能,比如代码覆盖率,CPU 和 内存分析。要提供这些统计信息,Go 就需要一种方式来跟踪 CPU 使用率,或在代码覆盖中跟踪一个函数何时被用到。
一个典型的互联网产品架构包含接入层、逻辑处理层以及存储层,其中存储层承载着数据落地和持久化的任务,同时给逻辑处理层提供数据查询功能支持。说到存储层就要说到数据库,数据库知识掌握程度也是面试考察的知识点。
清理内存是一个过程,它能够让 Go 知道哪些内存段最近可用于分配。但是,它并不会使用将位置 0 的方式来清理内存。
作为一名Golang开发者,线上环境遇到过好几次连接数暴增问题(mysql/redis/kafka等)。纠其原因,Golang作为常驻进程,请求第三方服务或者资源完毕后,需要手动关闭连接,否则连接会一直存在。而很多时候,开发者不一定记得关闭这个连接。这样是不是很麻烦?于是有了连接池。
关于 viper,无须多言,它是 Golang 社区里最流行的配置文件工具,除了常见功能之外,它还支持很多高级功能,比如可以加载远程配置,正好我最近在研究 etcd,于是我打算把二者结合起来,没想到就此开启了填坑之旅。
Go 语言在进行文件操作的时候,可以有多种方法。最常见的比如直接对文件本身进行Read
和Write
;除此之外,还可以使用bufio
库的流式处理以及分片式处理;如果文件较小,使用ioutil
也不失为一种方法。面对这么多的文件处理的方式,那么初学者可能就会有困惑:我到底该用那种?它们之间有什么区别?笔者试着从文件读取来对 go 语言的几种文件处理方式进行分析。
手把手教你。
微服务,这三个字正在席卷着目前的互联网软件行业,尤其在近几年云原生迸发后,似乎人人都对微服务有了更广泛的使用和理解,张口就是各种各样的问号,有着强大的好奇心。但微服务的拆分维度是什么?
2019 年底的分享。
从一个故事开始~
网站必备的功能。
平时我们构建的 Docker 镜像通常比较大,占用大量的磁盘空间,随着容器的大规模部署,同样也会浪费宝贵的带宽资源。本文将介绍几种常用的方法来优化 Docker 镜像大小,这里我们使用 Docker Hub 官方上的 Redis 镜像进行说明。
Go 语言底层实现的为小端模式,因为计算机进行计算时,都是从低位开始进行计算的,这样计算效率比较高。而大端模式比较方便用户阅读,比较符合我们的阅读习惯。
今天偶然在掘金上看到了关于 Go 的征文稿,恰逢赶上自己学 Go 一周年的时间,最近也在部门内做了关于《Let's Go ! Go 语言入门与实践》的分享,结合自身在字节跳动的业务开发经历,整体聊聊自身关于 Go 的一些学习感悟与成长。
17、golang net/http 超时引发大量 fin-wait2
通过 grafana 监控面板,发现几个高频的业务缓存节点出现了大量的 fin-wait2,而且 fin-wait2 状态持续了不短的时间。
1、ent
Go 的实体框架。简单而强大的 ORM,用于建模和查询数据。官网 https://entgo.io/,Facebook 出品。最初是一个“ Facebook 孵化器”项目,但自本周发布的 v0.4.0 起,它已成为 Facebook 的正式项目。
tracesite 是 traceroute 工具的简单 Go 实现,作者写了一篇文件介绍它:https://blog.kalbhor.xyz/post/implementing-traceroute-in-go/。
不过这个项目结构不符合 Go 规范,里面不应该有 src。
3、askgit
使用 SQL 查询 git 存储库。比如:askgit "SELECT * FROM commits
,该库之前叫做:gitqlite。
4、guora
Go 类似知乎的私有部署问答应用,包含问答、评论、点赞、管理后台等功能。
5、ebiten
Go 的简单 2D 开源游戏库。Ebiten 的简单 API 使您可以快速轻松地开发可在多个平台上部署的 2D 游戏。
用于字符串,数字,切片和结构的验证程序。
7、 babygo
从头开始编写的 Go 编译器。
8、 logr
mattermost 开源的 go log 工具。
1、nali
一个查询 IP 地理信息和 CDN 提供商的离线终端工具。
峰云就她了 博主的分享 PPT。
3、GopherCon Russia 2020 大会(俄文)
疫情没有阻挡大会的正常进行。
4、lsif-go
Language Server 索引格式生成器。
5、回放第 101 期 2020-08-16 晓黑板 go-zero 微服务框架的架构设计
Go 夜读 第 101 期晓黑板 go-zero 微服务框架分享。
Go101 作者分享。
7、油管视频
从 OO 语言到 Go 的历程。
微信搜索"Go语言中文网"或者扫描二维码,即可订阅。