我应该如何声明一个具有返回不同接口切片的方法的接口?


仙风道骨刘憨
2025-03-18 03:31:48 (21天前)
  1. 这是我创建的一个示例,我在其中声明了我的第一个struct,它是一个包含切片HammersToolbox。我为ToolboxHammer创建了一个界面,以便其他人可以使用我的功能......

2 条回复
  1. 0# AsuRa | 2019-08-31 10-32



    您的界面定义没有任何问题。问题是你没有正确转换

    []Hammer



    []HammerInterface

    。看起来你希望这会神奇地发生,但事实并非如此。



    在这段代码中:




    1. func (t Toolbox) GetHammers() []HammerInterface {
      return []HammerInterface{t.Hammers}
      }

    2. </code>


    您可能期望返回的结果是3的切片

    HammerInterface

    s,但相反,你得到一个单一的

    HammerInterface

    ,实际上是三分之一

    Hammers

    秒。



    您必须手动执行此转换。看到

    这个帖子

    更多细节。




    1. func (t Toolbox) GetHammers() []HammerInterface {
      hammerInterfaces := make([]HammerInterface, len(t.Hammers))
      for i, hammer := range t.Hammers {
      hammerInterfaces[i] = t.Hammers[i]
      }
      return hammerInterfaces
      }

    2. </code>


    在大多数现实场景中,编译器会捕获您的错误,因为您的锤子片(

    t.Hammers

    )不满足

    HammerInterface

    接口,但在您的情况下,由于该接口为空,它匹配

    随便哪种

    ,作为

    interface{}

    将。


登录 后才能参与评论