我正在Go中开发一个框架,让用户注入依赖项,例如记录器和数据库。我提供了我希望用户实现的接口。
现在,我还需要用户提供一堆功能,例如签名验证和哈希,因为我不想为此选择特定的实现。请参见以下示例(不切实际)
package crypto
type Fns interface {
// Hash returns the hash digest of the passed data
Hash([]byte) []byte
// Verify checks for a valid signature on the message for given public key
Verify(msg, sig []byte, pk PublicKey) (bool, error)
}
因此,此crypto.Fns
接口只是功能的集合。我希望用户将其实现为无状态struct{}
类型。我也不想将其保存到包全局变量中,只是像这样包装调用
package crypto
// user must set this before using the framework
var Impl Fns
func Hash(data []byte) []byte { return Impl.Hash(data) }
// ...
因为在以后的某个时间点,在框架的不同位置使用不同的实现可能会变得有趣。
您认为这是一个好模式吗?如果是这样,我该怎么命名? Fns
? Helper
? Impl
?