Golang导入基于配置变量

时间:2015-02-25 18:42:20

标签: go

我目前正处于学习过程中但我最近达到了一个目的,在我的一项测试中,我想创建一个快速备份应用程序,它将引用一个配置文件并切换什么"插件"用于备份。所以我在这一点上所要做的就是创建(例如,从我的头部编写并且语法可能不正确):

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)可以随时灵活地添加更多内容,但我的代码足够通用,可以在配置文件中选择任何存储后端执行。

正如我上面提到的,我仍然在学习,任何解释都会受到赞赏,或者说明如何实现这一点。我不介意你做错了#34;只要有正确的解释,为什么它错了,怎么做对。

1 个答案:

答案 0 :(得分:3)

您有正确的想法,可以通过界面启动,实现所需的一切,然后您可以插入任何实现该界面的具体备份“插件”。

一旦您可以通过界面运行备份,您只需根据您设置的条件分配您想要的后端实例。

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