Go语言爱好者周刊:第 17 期 | 文末招聘

点击上方蓝色“Go语言中文网”关注我们,领全套Go资料,每天学习 Go 语言

这里记录每周值得分享的 Go 语言相关内容,周日发布。

本周刊开源(GitHub:polaris1119/golangweekly[1]),欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue[2]

由于微信不支持外链,文中链接可以通过文末「阅读原文」查看。

鉴于大部分人可能没法坚持把英文文章看完,因此,周刊中会尽可能推荐优质的中文文章。优秀的英文文章,我们的 GCTT 组织会进行翻译。

640?wx_fmt=png

题图: 暗黑破坏神 2

刊首语

go.dev:一个新的 Go 开发人员中心,提供了关于 Go 的学习资源等信息。这么好的东西,国内是不是应该有一个类似的针对本土化的站点呢?是的,我们已经在行动了:https://github.com/polaris1119/golangclub 这是仓库地址,有兴趣的可以加入我们,可加微信:274768166。

资讯

北京时间 2019 年 11 月 14 日凌晨 1 点 16 分,Go 官方团队在 golang-nuts 邮件组宣布 go.dev 上线

2、Helm 3.0 正式发布,Kubernetes 包管理器[3]

Helm 3.0   已经发布,该版本是  CLI  工具的最新主要版本,主要关注简单性、安全性和可用性。

3、Gitea 1.10.0 发布[4]

是时候发布另一个重要版本了!我们很荣幸向世界展示 Gitea 1.10.0。

4、OpenDiablo2:《暗黑破坏神 2》的开源重新实现[5]

这个牛逼了,Go 实现的开源 暗黑破坏神 2 游戏引擎。

640?wx_fmt=png

5、 cilium 1.6 发布 [6]

可 100% 替换 kube-proxy,基于套接字的负载平衡,通用 CNI 链接,本机 AWS ENI 支持。

640?wx_fmt=png

BFE(Baidu Front End,百度统一前端)是百度的统一七层流量转发平台。BFE 平台目前已接入百度大部分流量,每日转发请求接近 1 万亿,峰值 QPS 超过 1000 万。在 2019 年百度春晚红包活动中,BFE 平台在超大用户压力、数次流量波峰下平稳运行,保证了春晚红包活动的顺利进行。

640?wx_fmt=png

7、 go-mir v1.0.2 发布,用 Go 结构体标签定义 handler 路由信息的辅助库 [7]

go-mir v1 的架构大体是这样:

640?wx_fmt=jpeg

GitHub 终于官方宣布了将会推出自家研发的手机版应用:GitHub Mobile。

9、gopls v0.2.0 发布[8]

据说性能还是有待优化。

问答

1、结构体指针切片和结构体数组指针的区别?[9]

type Widget struct {
    id    int
    attrs []string
}
//下面两种传参有什么区别?
func doSomThing(ss *[]Widget){

}
func doOtherThing(sp []*widget){

}

2、golang 的接口指针为什么不能调用方法?[10]

type I interface {
    name()
}
type S struct{}

func (*S) name() {
}
func TestInterface(t *testing.T) {
    var value I = &S{}
    value.name() //可以调用

    var point = &value
    point.name() //不能调用
}

3、golang 如何返回一个有序的 map 类型的数据[11]

golang 的 map 我们知道是无序的, 可是实际应用的时候, 我回经常需要返回一个有序的格式 比如 list 列表按时间分组排序, 这种的实现思路 应该如何呢?

4、slice 地址问题[12]

你理解吗?

文章

在《Go Time》第 100 期中,Rob Pike 和 Robert Griesemer(Go 的两位创建者)一起探讨了 Go 语言的成功经验。

总结逃逸分析的各种情况。

本文将通过 runtime 对 goroutine 的调度分析,帮助大家理解它的机理和发现一些内存和调度的原理和问题,并且基于此提出一种个人的解决方案 — 一个高性能的 Goroutine Pool(协程池)。

开始煎鱼大佬和无闻大佬在讨论 go-ini/ini 这个库为什么不加个 WatchConfig 的功能呢?另一个加载配置文件的库 viper 有类似的功能。其实这是很常见的需求,不用修改代码, 修改一下配置文件即可实现热更配置。

本文旨在对如何用 Go 语言构建 LL(1) 文法的解析器 ——此例用来解析 SQL 请求——作出简要的介绍。只需要读者具有极少的编程能力(函数、结构体、条件语句和 for 循环)。

TiDB Wasm 的后续。

实际线上问题的排查过程分享。

一篇关于 Go 实现 TCP 扫描器的文章。

9、uber-go 漏桶限流器使用与原理分析[13]

uber 在 Github 上开源了一套用于服务限流的 go 语言库ratelimit[14], 该组件基于 Leaky Bucket(漏桶)实现。

10、你不知道的 Go unsafe.Pointer uintptr 原理和玩法[15]

这个类型比较重要,它是实现定位和读写的内存的基础,Go runtime 大量使用它,但我们使用它是需要考虑清楚。

11、go 的 text/template 源码解析[16]

go 的模板库一直缺少 indent 的功能,于是我决定自己造个轮子来解决这个问题。

12、斗鱼基于 Golang 在高并发场景下的日志系统实践[17]

斗鱼的业务是经典的高并发场景,不仅要优化业务逻辑,同时还要提升日志等基础组件的性能。

大会内容总结。

开源项目

1、BadgerDB: Go 中的一种快速,可嵌入的 Key-Value 数据库[18]

BadgerDB 是一个用纯 Go 编写的可嵌入,持久和快速键值(KV)数据库。它是 Dgraph(快速,分布式图数据库)的基础数据库。它打算成为 RocksDB 等非基于 Go 的键值存储的高性能替代品。

2、tview: 用于终端 UI 的 Rich Interactive Widget[19]

具有各种控件:文本视图,表视图,列表,flexbox 布局等的输入表单。这里有文章做基本介绍[20]

640?wx_fmt=gif

3、 gev: 一个轻量、比 net 库更快的基于 Reactor 模式的非阻塞 TCP 网络库 [21] (@ Allenxuxu [22] 投稿)

一个轻量、快速的基于 Reactor 模式的非阻塞 TCP 网络库,支持自定义协议,轻松快速搭建高性能服务器。

特点:

  • 基于 epoll 和 kqueue 实现的高性能事件循环
  • 支持多核多线程
  • 动态扩容 Ring Buffer 实现的读写缓冲区
  • 异步读写
  • SO_REUSEPORT 端口重用支持
  • 支持 WebSocket
  • 支持定时任务,延时任务
  • 支持自定义协议

4、apns2[23]

适用于 Go 的 HTTP/2 Apple 推送通知服务(APN)推送提供程序——使用 APNs HTTP/2 协议将推送通知发送到 iOS,tvOS,Safari 和 OSX 应用程序。

5、validator: Go Struct 和 Field 验证器,包括跨结构、Map、Slice 和数组等[24]

该验证器基于标签对结构和单个字段实现值验证。

6、goreplay: 捕捉和重放 http 流量[25]

GoReplay 是一个开源网络监视工具,可以记录您的实时流量,并将其用于负载测试,监视和详细分析等。

7、expr: 表达式编译和求值引擎[26]

可以在线试验:https://antonmedv.github.io/expr/

640?wx_fmt=png

8、 imgproxy [27]

一个 Go 语言写的图片代理网关,可以代理远程图片,并且提供格式转换和大小缩放功能。

9、Shiori: 使用 Go 构建的简单书签管理器[28]

旨在作为 Pocket[29] 的简单克隆。您可以将其用作命令行应用程序或 Web 应用程序。该应用程序以单个二进制文件的形式分发,这意味着它可以轻松安装和使用。

10、go2ast[30]

将 Go 代码转换为抽象语法树(AST)

11、gothanks: 自动为你 go.mod 中的依赖项加注星标[31]

感谢其他 Go 模块维护者。

12、RadVPN: 去中心化的分布式 VPN[32]

RadVPN 不需要任何中心点,因为它直接连接到其他节点(全网),并且具有内置的路由器,该路由器可以帮助数据包路由到适当的目的地。

640?wx_fmt=png

13、 fastzip:快速创建和读取 zip 的库 [33]

Fastzip 是一个 Zip 存档器和提取器,专注于速度。

14、musig[34]

像 shazam 那样实现音乐识别。

15、dcron: 分布式定时任务库 distributed-cron[35]

基于 redis 同步节点数据,模拟服务注册。然后将任务名 根据一致性 hash 选举出执行该任务的节点。

640?wx_fmt=png

16、 wego: Go 实现的终端的天气应用 [36]

640?wx_fmt=gif

17、 stack: Error 的堆栈跟踪 [37]

与 fmt.Errorf 相同,但具有堆栈跟踪。

18、gohack[38]

新 go module 机制将外部依赖缓存在本地只读目录中无法更改,如果要更改外部模块代码做 debug,gohack 可以来帮您。

资源&&工具

1、go time: 用 Go 构建搜索工具[39]

Bleve 作者出席 gotime。

2、gotime: 讨论代码编辑器[40]

Go 常用的编辑器就那几个吧。

3、LXC 系统教程[41]

LXC 是 Linux 容器的一个运行时,可以看作 Docker 的替代品。本系列是 LXC 的一个作者写的如何上手的系列文章。

4、《高性能 Go 代码工坊》中译[42]

原文[43]是深入研究 Go 应用性能提升的英语系列文章,这里是中译。

TiDB-Wasm 项目是 TiDB Hackathon 2019 中诞生的二等奖项目,实现了将 TiDB 编译成 Wasm 运行在浏览器里,让用户无需安装就可以使用 TiDB。

招聘信息

【公司】:北京长亭科技有限公司

【网址】:https://www.chaitin.cn/zh/products

【岗位】:Golang 工程师

【薪资】:15-30k,特别优秀的可谈

【联系】:简历投递邮箱:xiao.zhao@chaitin.com[44]

【岗位职责】:

  • 参与后端服务的需求分析与技术方案设计
  • 完成服务模块的编码与测试工作
  • 根据项目计划,按时提交高质量代码
  • 完成所负责模块的文档撰写

【岗位要求】:

  • 熟悉 Python/Go/SQL 等后端相关编程语言
  • 了解常用数据结构与算法
  • 熟悉至少一种常用后端框架如 Django
  • 熟悉至少一种常用关系型数据库如 PostgreSQL、MySQL 等
  • 熟悉至少一种常用非关系型数据库如 MongoDB、Redis 等

【加分项】:

  • 了解前端相关技术,有前端相关开发经验
  • 有 DevOps 实践经验

订阅

这个周刊每周日发布,同步更新在Go 语言中文网[45]微信公众号[46]今日头条[47]

微信搜索"Go 语言中文网"或者扫描二维码,即可订阅。

640?wx_fmt=png

长按关注

推荐阅读

文中链接
[1]

polaris1119/golangweekly: https://github.com/polaris1119/golangweekly

[2]

提交 issue: https://github.com/polaris1119/golangweekly/issues

[3]

Helm 3.0 正式发布,Kubernetes 包管理器: https://www.oschina.net/news/111342/helm-3-0-released

[4]

Gitea 1.10.0 发布: https://blog.gitea.io/2019/11/gitea-1.10.0-is-released/

[5]

OpenDiablo2:《暗黑破坏神2》的开源重新实现: https://github.com/OpenDiablo2/OpenDiablo2

[6]

cilium 1.6 发布: https://cilium.io/blog/2019/08/20/cilium-16

[7]

go-mir v1.0.2 发布,用 Go 结构体标签定义 handler 路由信息的辅助库: https://www.oschina.net/news/111297/go-mir-1-0-2-released

[8]

gopls v0.2.0 发布: https://github.com/golang/go/issues/33030

[9]

结构体指针切片和结构体数组指针的区别?: https://segmentfault.com/q/1010000020942293

[10]

golang 的接口指针为什么不能调用方法?: https://segmentfault.com/q/1010000020955970

[11]

golang 如何返回一个有序的map类型的数据: https://segmentfault.com/q/1010000020263981

[12]

slice地址问题: https://studygolang.com/topics/10399

[13]

uber-go漏桶限流器使用与原理分析: https://www.cyhone.com/articles/analysis-of-uber-go-ratelimit/

[14]

ratelimit: https://github.com/uber-go/ratelimit/

[15]

你不知道的Go unsafe.Pointer uintptr原理和玩法: https://www.cnblogs.com/sunsky303/p/11820500.html

[16]

go的text/template源码解析: https://bigpigeon.org/post/go-text-template/

[17]

斗鱼基于 Golang 在高并发场景下的日志系统实践: http://100000p.com/article/2c9f60ef6e5884e0016e58875e4e0000

[18]

BadgerDB: Go 中的一种快速,可嵌入的 Key-Value 数据库: https://github.com/dgraph-io/badger

[19]

tview: 用于终端 UI 的Rich Interactive Widget: https://github.com/rivo/tview

[20]

基本介绍: https://rocketnine.space/post/tview-and-you/

[21]

gev: 一个轻量、比 net 库更快的基于 Reactor 模式的非阻塞 TCP 网络库: https://github.com/Allenxuxu/gev

[22]

Allenxuxu: https://github.com/Allenxuxu

[23]

apns2: https://github.com/sideshow/apns2

[24]

validator: Go Struct 和 Field 验证器,包括跨结构、Map、Slice 和数组等: https://github.com/go-playground/validator

[25]

goreplay: 捕捉和重放 http 流量: https://github.com/buger/goreplay

[26]

expr: 表达式编译和求值引擎: https://github.com/antonmedv/expr

[27]

imgproxy: https://github.com/imgproxy/imgproxy

[28]

Shiori: 使用 Go 构建的简单书签管理器: https://github.com/go-shiori/shiori

[29]

Pocket: https://getpocket.com//

[30]

go2ast: https://github.com/reflog/go2ast

[31]

gothanks: 自动为你 go.mod 中的依赖项加注星标: https://github.com/psampaz/gothanks

[32]

RadVPN: 去中心化的分布式 VPN: https://github.com/mehrdadrad/radvpn

[33]

fastzip:快速创建和读取zip的库: https://github.com/saracen/fastzip

[34]

musig: https://github.com/sfluor/musig

[35]

dcron: 分布式定时任务库 distributed-cron: https://github.com/LibiChai/dcron

[36]

wego: Go 实现的终端的天气应用: https://github.com/schachmat/wego

[37]

stack: Error 的堆栈跟踪: https://github.com/romanyx/stack

[38]

gohack: https://github.com/rogpeppe/gohack

[39]

go time: 用 Go 构建搜索工具: https://changelog.com/gotime/104

[40]

gotime: 讨论代码编辑器: https://changelog.com/gotime/106

[41]

LXC 系统教程: https://stgraber.org/2013/12/20/lxc-1-0-blog-post-series/

[42]

《高性能 Go 代码工坊》中译: https://www.yuque.com/ksco/uiondt

[43]

原文: http://www.ruanyifeng.com/blog/2019/11/:https://dave.cheney.net/high-performance-go-workshop/dotgo-paris.html

[44]

xiao.zhao@chaitin.com: mailto:xiao.zhao@chaitin.com

[45]

Go语言中文网: https://studygolang.com/go/weekly

[46]

微信公众号: https://weixin.sogou.com/weixin?query=Go%E8%AF%AD%E8%A8%80%E4%B8%AD%E6%96%87%E7%BD%91

[47]

今日头条: https://www.toutiao.com/c/user/59903081459/#mid=1586087918877709

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值