跳至主要內容

go的设计思考

Mr.Lexon大约 1 分钟back-end

go的设计思考

go的设计思想是将抽象与实现分离,在实现的时候才将其注入,这样其实就具备了控制反转。看以下例子:

type Logger interface {
    Log(message string)
}

type ConsoleLogger struct{}

func (c ConsoleLogger) Log(message string) {
    fmt.Println(message)
}

func Process(logger Logger) {
    logger.Log("Processing data")
}

func main() {
    var logger Logger = ConsoleLogger{}
    Process(logger)
}

在这里Logger其实是形成一种约定,而ConsoleLogger里面的Log函数是对interface的实现,但是与ConsoleLogger本身无关,当Process需要调用时,由于他只是需要LoggerLog功能,所以在实现层,我们可以在main()ConsoleLogger实现之后注入到Process里面去,总结,这是由main去控制,与ConsoleLogger无关。 在go的开发中,领域被严格切分成两块:

  1. 抽象
  2. 实现 这两块一个是负责抽象约定,其不参与实现过程中的具体变化,只起到一个对值约束的功能,而且,每一个的值并非是必填值,而是根据需求对应属性实现值,所以抽象层与具体的值无关,只与值的范围有关。 第二层则是实现,在实现的过程中,若要使用结构体,则要先将其约定,然后对应注入需要使用的值,可以在值构建的时候进行一个解耦补充。这是其一大特点。 而且从组合的用法上来看,组合倾向于在实现过程中注入而不是在实现前注入,这样极大的减少了耦合性。
上次编辑于:
贡献者: Lexon