MST

星途 面试题库

面试题:Go语言中Go inject实践时如何进行简单的代码复用

在Go inject实践场景下,假设已有一个基础的注入模块,用于注入数据库连接实例。现在需要在不同的业务逻辑模块中复用这一数据库连接注入逻辑,简述实现思路并给出简单示例代码。
22.4万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 定义数据库连接接口:首先定义一个接口来抽象数据库连接的操作,这样不同类型的数据库连接(如MySQL、PostgreSQL等)都可以实现这个接口。
  2. 基础注入模块:编写一个基础的注入模块,用于创建并返回数据库连接实例。这个模块可以通过依赖注入的方式将数据库连接提供给其他业务逻辑模块。
  3. 业务逻辑模块复用:业务逻辑模块通过依赖注入的方式接受数据库连接实例,而不是自己创建,从而复用基础注入模块的逻辑。

示例代码

package main

import (
    "fmt"
)

// 定义数据库连接接口
type Database interface {
    Connect() string
}

// MySQL数据库连接实现
type MySQL struct{}

func (m *MySQL) Connect() string {
    return "Connected to MySQL"
}

// 基础注入模块
func ProvideDatabase() Database {
    return &MySQL{}
}

// 业务逻辑模块
type BusinessLogic struct {
    db Database
}

func NewBusinessLogic(db Database) *BusinessLogic {
    return &BusinessLogic{
        db: db,
    }
}

func (b *BusinessLogic) DoWork() {
    result := b.db.Connect()
    fmt.Println(result)
}

你可以使用以下方式调用:

func main() {
    // 获取数据库连接实例
    db := ProvideDatabase()
    // 将数据库连接注入业务逻辑模块
    bl := NewBusinessLogic(db)
    bl.DoWork()
}