【发布时间】:2022-01-16 22:21:17
【问题描述】:
Go 的标准库中有一些通用接口,例如 io.Closer:
type Closer interface {
Close() error
}
如果我想在我的代码中定义一个具有Close 方法的接口,我会像这样嵌入io.Closer:
type example interface {
io.Closer
// ... some other functions or embedded types
}
或者我会像这样定义函数本身:
type example interface {
Close() error
// ... some other functions or embedded types
}
这方面有什么最佳做法吗?
【问题讨论】:
-
大多数 stdlib 包使用
io.Closer。示例:pkg.go.dev/mime/multipart#File。旧代码直接定义Close():github.com/golang/go/blob/master/src/cmd/pack/pack.go#L230 -
当
Close表示“结束输入/输出并释放这个东西使用的资源”时,通常使用io.Closer。如果Close方法有其他含义,那么最好在接口声明中声明并记录该方法。