Golang导入基于配置变量



我目前仍在学习围棋,但最近在一次测试中,我想创建一个快速备份应用程序,该应用程序将引用配置文件并切换用于备份的"插件"。因此,在这一点上,我要做的是创建(例如,从我的头脑中编写,语法可能不正确):

type BackupStorage interface{
   Put (d []byte) (n int, err Error)
   Get (l []byte) (d []byte, err Error)
}

在这一点上,我认为我应该使用反射来打开类型并返回特定的备份函数,尽管这似乎是不对的。

我的第二个选择是仍然使用我的BackupStorage接口,并创建"插件"包来指定将使用哪个导入,但我如何根据配置文件变量切换它。我想这样做是因为一台机器上的一些东西可能只备份到s3,而其他东西可能同时备份到s3和谷歌驱动器等。

对于上面的基本示例,我想到的是:实现2个BackupStorage"插件"(Google Drive/S3),可以灵活地随时添加更多,但我的代码要足够通用,可以在配置文件中选择的任何存储后端上执行。

正如我上面提到的,我仍在学习,任何解释或如何实现这一点的例子都将不胜感激。我不介意"你做错了",只要有一个正确的解释来解释为什么是错的以及如何做对。

您有正确的想法开始,通过接口实现您需要的一切,然后您可以插入任何实现该接口的具体备份"插件"。

一旦您可以通过接口运行备份,您就可以根据设置的任何条件简单地分配所需的后端实例。

var storage Backupper
type Backupper interface {
    Backup()
}
type GDrive struct {
    config string
}
func (g *GDrive) Backup() {
    fmt.Println("Doing backup to Google Drive")
}
func main() {
    storage = &GDrive{}
    storage.Backup()
}

或者有多个选项:http://play.golang.org/p/RlmXjf55Yh

最新更新