【发布时间】:2026-01-05 07:45:01
【问题描述】:
这是我创建的一个示例,我在其中声明了我的第一个结构,它是一个 Toolbox,其中包含一个切片 Hammers。我为Toolbox 和Hammer 做了一个接口,这样其他人就可以使用我的函数而不必使用我的结构,只要他们遵循我的接口实现即可。
package main
import "fmt"
type ToolboxInterface interface {
GetHammers() []HammerInterface
}
type HammerInterface interface {
}
type Toolbox struct {
Hammers []Hammer
}
func (t Toolbox)GetHammers() []HammerInterface {
return []HammerInterface{t.Hammers}
}
type Hammer struct {
Color string
}
func CountHammersInToolbox(t ToolboxInterface) int {
hammers := t.GetHammers()
return len(hammers)
}
func main() {
toolbox := Toolbox{Hammers: []Hammer{
{Color: "Red"},
{Color: "Blue"},
{Color: "Green"}}}
fmt.Println(len(toolbox.Hammers))
fmt.Println(CountHammersInToolbox(toolbox))
}
我的ToolboxInterface 声明了我已经实现的GetHammers() 方法。但是 CountHammersInToolbox 方法返回 1 而不是输出中的 3。
uberswe$ go run scratch/main.go
3
1
我尝试了不同的变体,但我觉得有点卡住了。我不明白为什么它返回 1 但我怀疑我以错误的方式声明我的接口方法。
我应该如何声明一个具有返回不同接口切片方法的接口?
【问题讨论】:
-
我想我通过将
Toolbox结构更改为Hammers []HammerInterface解决了这个问题,但我不确定为什么要这样声明。我对可以很好地解释这一点或链接到好的指南/文档的答案感兴趣。
标签: go