登录
首页 >  Golang >  Go问答

`Context`接口在什么情况下需要在`context.go`中定义?

来源:stackoverflow

时间:2024-02-08 16:18:23 275浏览 收藏

目前golang学习网上已经有很多关于Golang的文章了,自己在初次阅读这些文章中,也见识到了很多学习思路;那么本文《`Context`接口在什么情况下需要在`context.go`中定义?》,也希望能帮助到大家,如果阅读完后真的对你学习Golang有帮助,欢迎动动手指,评论留言并分享~

问题内容

Golang CodeReviewComments 的 interfaces 部分指出:

Go 接口通常属于使用接口类型值的包,而不是实现这些值的包。实现包应该返回具体的(通常是指针或结构)类型:这样,可以将新方法添加到实现中,而不需要大量重构。

然而,Go 的 context.go 模块既定义了 context 接口,又为 type emptyCtx inttype cancelCtx struct 实现它。

请注意,上面列出的部分表示它们“通常”属于使用接口类型值的包中 - 所以我知道这不是一个严格的规则。

但是,我很好奇他们可以在 context 包中执行此操作的标准是什么。

此外,这假设 CodeReviewComments 是 Go 代码审查和风格指南的规范资源。


正确答案


在同一个包中定义接口的实现实际上很常见,尤其是在实现 strategy patternchain of responsibility(如上下文)时。

net包为例,它定义了Listener接口,同时还定义了TCPListenerUDPListenerUnixListener。在这种情况下,将功能放在另一个包中是不合逻辑的。

io 包对读者和作者做了类似的事情。

另一个方便的模式是为只有 1 个函数的接口定义函数别名。就像 HandlerFunc 实现 Handler 一样,允许用户将闭包强制转换为 HandlerFunc,这样他们就不必定义自己的类型,这需要更多的工作。

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>