go - 在 go 中从外部包扩展一个流畅的 API

标签 go fluent

我目前从提供流畅 API 的外部包中获得了一个对象,例如:

thing := ext.GetThing()
thing.do().stuff()

我想扩展它以提供一个新函数很酷所以我可以像这样使用它

thing.do().cool().stuff()

不幸的是,因为我不能用外部类型作为 cool 的接收器,所以到目前为止我得到的最好的似乎是

cool(thing.do()).stuff()

当我将我的自定义内容与内置的 fluent 结合起来时,这变得非常难以阅读。

Go 中是否有某种方法可以实现我所缺少的扩展流畅风格?

最佳答案

不,你不能,因为你“不能在非局部类型上定义新方法”,如果你尝试,编译器会告诉你。

假设您想做一些愚蠢的事情:

import "net/http"

func (c *http.Client) SayHi() {
    println("Hi!")
}

这不会编译,您会收到上面提到的错误消息,您可以在此处查看:https://play.golang.org/p/FxBMAfR_aN

关于go - 在 go 中从外部包扩展一个流畅的 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38046591/

相关文章:

go - 有人可以解释一下为什么 "curl: (7) Failed to connect to 127.0.0.1 port 2000: Connection refused"吗?

go - 在测试中添加gomock测试到项目会产生“构建约束排除所有Go文件”

cluster-computing - Go中的集群计算

mysql - 流畅的多对多关系不起作用

c# - 在 C# 对象中启用流畅的设计

json - 如何通过 json 将键值对数组传递给结构的 golang slice

go - 在 Go 中运行 Python 命令

c# - 一对零或一关系,其中 FK 是从属表上的复合 PK 的一部分

nhibernate - Fluent Nhibernate Composite Key 不为引用实体生成连接

php - 使用 Laravel Fluent 有没有办法检索更新或插入的行?