docker - 戈兰 : Is it safe to say that if a struct implements a method then it satisfies all interfaces that define that method's signature?

标签 docker go

在 docker 源代码库中, image/backend.go 中存在一个接口(interface):

type imageBackend interface {
    ....
    ImagesPrune(pruneFilters filters.Args) (*types.ImagesPruneReport, error)
}

并且,daemon/prune.go中有一个实现:

func (daemon *Daemon) ImagesPrune(pruneFilters filters.Args) (*types.ImagesPruneReport, error) {
    ... implementation details ...
}

这是否意味着 Daemon 实现 imageBackend 接口(interface)的说法是正确的?

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

cli/../system/prune.go -> cli/../prune/prune.go -> cli/../image/prune.go -> client/image_prune.go -> api/server/..image/image_routes.go -> api/server/../image/backend.go -----> ??? ----> daemon/prune.go

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

最佳答案

是的,Daemon确实实现了imageBackend接口(interface)(正如评论中指出的,它实际上是实现该接口(interface)的 *Daemon 类型)。全部imageBackend的方法在daemon内的各种源代码文件中实现。包(主要是 image_*.go 的)。

image_routes.go postImagesPrune method is called ,依次 calls the ImagesPrune方法s.backends是指向 imageRouter 实例的指针.

type imageRouter struct {
    backend Backend
    decoder httputils.ContainerDecoder
    routes  []router.Route
}

这个imageRouter实例初始化为 backend设置为 Daemon 的实例在cmd/dockerd/daemon.go here

所以当 s.backend.ImagesPrune被调用时,它正在运行 ImagesPrune Docker Daemon 的方法,正如您上面指出的,位于 daemon/prune.go 中.

关于docker - 戈兰 : Is it safe to say that if a struct implements a method then it satisfies all interfaces that define that method's signature?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43298575/

相关文章:

Centos7 上的 Docker : connection refused

selenium - Docker-Selenium chrome 容器的最大数量

python - Apache Airflow 从 1.9.0 迁移到 1.10.1 后出现的问题

testing - 登录golang测试可以吗?还是不进行登录测试是一种做法?

go - 在GOPATH模式下不能使用path @ version语法

docker-compose 设备通配符

android - 通过 ADB 连接到 Docker 容器中的 USB Android 设备

arrays - 使用Golang修改xml文件中的数据

C++ 命名管道客户端不会读取超过 4096 字节

go - Golang中的文件清理