本期技术周刊一起了解 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:
- go byte 转换为 string 混乱?
- Golang 开发 UDP 组播在 windows10 上无法接收到消息?
- 如何在 Goland 中使用 quantlib?
- 用 go 的指针将 struct 相互转换 byte 乱码,请问这是什么原因,应该如何解决?
Most frequent:
- 请问 golang 如何导入自己的包?
- go 语言,一个 redis 存 json 字符串问题?
- golang 基础,这段程序的结果为啥是奇数?
- go 语言使用 errorgroup 当子协程发生 panic 怎么通知主协程?
- go 语言如何通过 channel 或 context 来实现协程等待?
- go 中 NewReader 是读取全部数据吗?
# SegmentFault 技术周刊 #
「技术周刊」是社区特别推出的技术内容系列,一周一主题。
每周二更新,欢迎「关注」。大家也可以在评论处留言自己感兴趣的主题,推荐主题相关的优秀文章。
如有问题可以添加小姐姐微信~
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。