Go 接口编程实现依赖反转 案例

5 min read

在Go中,接口是一种非常重要的概念,可以通过接口实现依赖反转。以下是一个示例:

// 定义一个接口
type Storage interface {
    Save(data []byte) error
}

// 实现接口的具体类
type DiskStorage struct {
    FilePath string
}

func (ds *DiskStorage) Save(data []byte) error {
    file, err := os.Create(ds.FilePath)
    if err != nil {
        return err
    }
    defer file.Close()
    _, err = file.Write(data)
    return err
}

// 依赖注入并调用方法
func main() {
    // 创建依赖
    storage := &DiskStorage{FilePath: "data.txt"}

    // 使用依赖
    data := []byte("Hello, world!")
    err := storage.Save(data)
    if err != nil {
        fmt.Println(err)
    }
}

在上述示例中,我们首先定义了一个接口Storage,并在DiskStorage中实现了该接口的方法Save。然后,我们在main函数中创建了一个依赖,即DiskStorage的实例,并将其赋值给接口变量storage。最后,我们使用依赖并调用Save方法。

这种依赖反转的方式可以将依赖从高层模块中抽象出来,并将其委托给低层模块实现,从而使高层模块与底层模块之间的耦合度降低,提高程序的可维护性和可扩展性。