我目前从提供流畅 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/