Go 不将 func 识别为有效接口

我有功能


func(context.Context, *domain.Scorecard) (*domain.Scorecard, error)

我想将此作为接收接口的参数传递


warehouse interface {

   Get(context.Context, *domain.Scorecard) (*domain.Scorecard, error)

}

前任:


warehouseMock := 

usecase.WithScenarioFinder(

  func(player *domain.Player) (*domain.Scenario, error) {

          return nil,nil

)

传统形式是创建一个具有 Get 方法的结构,但我很好奇是否存在告诉“嘿,这是一个简单的 func,是同一家公司(没有名称),接受它”的方式


拉风的咖菲猫
浏览 88回答 1
1回答

慕桂英3389331

函数不实现仅具有相同签名的单个方法的接口。有关该主题的讨论,请参阅此 Go 问题。创建适配器类型以将函数转换为接口:type WarehouseFunc func(context.Context, *domain.Scorecard) (*domain.Scorecard, error)func (f WarehouseFunc) Get(c context.Context, d *domain.Scorecard) (*domain.Scorecard, error) {   return f(c, d)}将匿名函数转换为如下接口:itf = WarehouseFunc(func(c context.Context, d *domain.Scorecard) (*domain.Scorecard, error) {    return nil, nil})
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go