Golang中为什么无法在实现接口的结构体新实例上调用接口函数?
Golang中为什么无法在实现接口的结构体新实例上调用接口函数? 为什么
builder := aliasBuilder{}
return builder.From(c.GetString("from")).To(c.GetString("to"))
能够编译并运行,但是
return aliasBuilder{}.From("this").To("that") //<- 不能运行?
如果存在一种方法让单行版本“运行”,那么它的语法会是什么样子?
以下是更完整的代码上下文。
type Alias struct {
From uuid.UUID
To uuid.UUID
}
func Create(c *gin.Context) domain.Alias {
builder := aliasBuilder{}
return builder.From(c.GetString("from")).To(c.GetString("to"))
}
type aliasBuilder struct {
from uuid.UUID
tb toBuilder
}
type toBuilder struct {
fb *aliasBuilder
touid uuid.UUID
}
type to interface {
To(to string) uuid.UUID
}
type from interface {
From(from string) to
}
func (fb *aliasBuilder) From(from string) *toBuilder {
fb.from = uuid.FromStringOrNil(from)
fb.tb = toBuilder{fb: fb}
return &fb.tb
}
func (tb *toBuilder) To(tot string) domain.Alias {
tb.touid = uuid.FromStringOrNil(tot)
return domain.NewAlias(tb.fb.from, tb.touid)
}
更多关于Golang中为什么无法在实现接口的结构体新实例上调用接口函数?的实战教程也可以访问 https://www.itying.com/category-94-b0.html
6 回复
因为你的接口需要一个指针接收器,而结构体字面量不能用作指针接收器。
更多关于Golang中为什么无法在实现接口的结构体新实例上调用接口函数?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
感谢您花时间解释这一点。内联正确地处理引用/解引用确实很棘手。
将你的实现改为使用非指针接收器,例如:
func (tb toBuilder) To(tot string) domain.Alias {
// ...
}
那么,我应该如何指定才能获得我想要的语法呢。
return aliasBuilder{}.From("this").To("that")
除了NobbZ的建议,你也可以这样写:
return (&aliasBuilder{}).From("this").To("that")
例如:


