3
头图

本期技术周刊一起了解 Go 语言?,欢迎大家阅读 ~

文章推荐

《手写编程语言-实现运算符重载》 作者:crossoverJie

运算符重载其实并不是一个常用的功能;因为会改变运算符的语义,比如明明是加法却在重载函数中写为减法。

这会使得代码阅读起来困难,但在某些情况下我们又非常希望语言本身能支持运算符重载。

比如在 Go 中常用的一个第三方精度库 decimal.Decimal,进行运算时只能使用 d1.Add(d2) 这样的函数,当运算复杂时...

《Golang 实现多存储驱动设计 SDK》作者:7small7

Gocache是一个基于Go语言编写的多存储驱动的缓存扩展组件。它为您带来了许多缓存数据的功能。

  • 多个缓存驱动存储:支持内存、redis或您自定义存储驱动。支持如下功能:
  • 链式缓存:使用具有优先级顺序的多个缓存(例如,内存然后回退到redis共享缓存)。
  • 可加载缓存:允许您调用回调函数将数据放回缓存中。
  • 指标缓存,可让您存储有关缓存使用情况的指标(命中、未命中、设置成功、设置错误……)。
  • 自动编组/解组缓存值作为结构的编组器。
  • 在存储中定义默认值并在设置数据时覆盖它们。
  • 通过过期时间和/或使用标签缓存失效。
  • 泛型的使用。

《Go clientSet Watch 运行后随机性失效》作者:建军

List 和 Watch 机制是 kubernetes 中重要的机制之一。控制器通过 API Server 的 List API 来获取所有最新版本的 API 对象,通过 Watch API 来监听所有 API 对象的变化。

在程序设计过程中,往往也需要利用 List && Watch 机制,来观察 API 对象的状态,从而调用 EventHandler,做出响应。

基于此背景,Go 语言官方的 clientSet 中提供了相应的 API 接口供开发者使用。然而,笔者在使用 Watch 机制中踩到了不小坑。

《对 Go2 错误处理提案的批判》作者:煎鱼

通过对 Go2 错误处理的设计草案的复习,我们了解到了 check 和 handle 函数的用法和思路。再针对新的语法,又对可能发生的新问题进行了 “批判”。

总的来说,新的语法,在弊端上会增加既有的代码复杂度和可读性,可以引发各种奇怪的嵌套,还会与 if err != nil 产生重复,变成了一种新的处理方式(多了一种)。

是否会还不如 if err != nil 那么的纯粹?

《Golang 中变量定义的坑》作者:kumfo

首先,文件结构如下:

.
├── a
│   └── a.go
├── b
│   └── b.go
├── go.mod
└── main.go

《几个提升 Go 语言开发效率的小技巧》作者:asong

Go语言允许一个函数把任意数量的值作为参数,Go语言内置了...操作符,在函数的最后一个形参才能使用...操作符,使用它必须注意如下事项:

可变长参数必须在函数列表的最后一个;
把可变长参数当切片来解析,可变长参数没有没有值时就是nil切片
可变长参数的类型必须相同

《在 Go 里用 CGO?这 7 个问题你要关注!》作者:煎鱼

Cgo 是一项了不起的技术,它允许 Go 程序与 C 语言库相互操作,这是一个非常有用的功能。

没有它,Go 就不会有今天的地位。cgo 是在 Android 和 iOS 上运行 Go 程序的关键。

我个人认为 cgo 在 Go 项目中被过度使用了,当面临在 Go 中重新实现一大段 C 语言代码时,程序员会选择使用 cgo 来包装库,认为这是个更容易解决的问题。但我认为这是一种错误的选择行为。

显然,在某些情况下,cgo 是不可避免的,最明显的是你必须与图形驱动或窗口系统进行互操作,而后者只能以二进制 blob 的形式提供。在这些场景下,cgo 的使用证明了它的权衡是合理的,比许多人准备承认的要少得多。

以下是一份不完整的权衡清单,当你把 Go 项目建立在 cgo 库上时,你可能没有意识到这些权衡。

问题推荐

Unanswered:

Most frequent:


# SegmentFault 技术周刊 #

「技术周刊」是社区特别推出的技术内容系列,一周一主题。

每周二更新,欢迎「关注」。大家也可以在评论处留言自己感兴趣的主题,推荐主题相关的优秀文章。

如有问题可以添加小姐姐微信~

image.png


Beverly
882 声望2.1k 粉丝

怂人面前全是坑,努力填坑 。


引用和评论

0 条评论