Docker Golang:可以肯定地说,如果一个结构实现了一个方法,那么它满足了定义该方法的所有接口';谁的签名?
在docker source repo中, 中存在一个接口: 并且,在以下方面有一个实施: 这是否意味着说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
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
}