Docker Golang:可以肯定地说,如果一个结构实现了一个方法,那么它满足了定义该方法的所有接口';谁的签名?

Docker Golang:可以肯定地说,如果一个结构实现了一个方法,那么它满足了定义该方法的所有接口';谁的签名?,docker,go,Docker,Go,在docker source repo中, 中存在一个接口: 并且,在以下方面有一个实施: 这是否意味着说Daemon实现imageBackend接口是正确的 背景: 我试图理解调用docker system prunecmd如何调用daemon.go中的imagestrune函数。我可以将代码流跟踪为: cli/。/system/prune.go ->cli/。/prune/prune.go ->cli/。/image/prune.go ->客户端/映像\u prune.go ->api/se

在docker source repo中, 中存在一个接口:

并且,在以下方面有一个实施:

这是否意味着说
Daemon
实现
imageBackend
接口是正确的

背景: 我试图理解调用
docker system prune
cmd如何调用
daemon.go
中的
imagestrune
函数。我可以将代码流跟踪为:

cli/。/system/prune.go
->cli/。/prune/prune.go
->cli/。/image/prune.go
->客户端/映像\u prune.go
->api/server/.image/image\u.go
->api/server/。/image/backend.go
-----> ??? ----> 守护进程/prune.go


我不知道上面的
部分中有什么内容。

是的,
守护进程
实现了
imageBackend
接口(正如评论中指出的,实际上是
*守护进程
类型实现了接口)。所有
imageBackend
的方法都在
守护进程
包(主要是
image.*.go
包)内的各种源代码文件中实现

image\u routes.go
postmagesprune,这反过来又是
s.backend
imagestrune
方法
s
是指向
imageRouter
实例的指针

type imageRouter struct {
    backend Backend
    decoder httputils.ContainerDecoder
    routes  []router.Route
}
imageRouter
实例通过
backend
cmd/dockerd/Daemon.go
中设置为
Daemon
的实例进行初始化


因此,当调用
s.backend.ImagesPrune
时,它正在运行Docker守护进程的
ImagesPrune
方法,正如您在上面指出的那样,它位于
守护进程/prune.go

在这种情况下,
*Deamon
实现imageBackend而不是
Deamon
。在Go中,两者都是不同的。我认为在这种情况下,
*Deamon
(Deamon类型的指针)实现了
imageBackend
接口,而不是
Deamon
func (daemon *Daemon) ImagesPrune(pruneFilters filters.Args) (*types.ImagesPruneReport, error) {
    ... implementation details ...
}
type imageRouter struct {
    backend Backend
    decoder httputils.ContainerDecoder
    routes  []router.Route
}