MST

星途 面试题库

面试题:Go中Go inject库在简单Web服务中的应用

假设你要开发一个简单的Web服务,使用Go inject库来实现依赖注入,描述一下整体的实现步骤,包括如何定义接口、创建注入器以及在HTTP处理函数中使用依赖注入。
13.5万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 定义接口

    • 首先定义服务接口,例如如果是一个用户服务,定义如下:
    type UserService interface {
        GetUserByID(id int) (User, error)
    }
    
    • 这里User是自定义的结构体,代表用户信息。
  2. 创建具体实现

    • 实现上述接口,例如:
    type UserServiceImpl struct {
    }
    
    func (u *UserServiceImpl) GetUserByID(id int) (User, error) {
        // 具体从数据库或其他数据源获取用户的逻辑
        var user User
        // 数据库查询逻辑等
        return user, nil
    }
    
  3. 创建注入器

    • 导入go - inject库,假设库名为inject
    package main
    
    import (
        "github.com/go - inject/inject"
    )
    
    func main() {
        injector := inject.NewInjector()
        userService := &UserServiceImpl{}
        injector.Map(userService).To(new(UserService))
    }
    
    • 这里创建了一个注入器injector,并将UserServiceImpl的实例映射到UserService接口。
  4. 在HTTP处理函数中使用依赖注入

    • 首先创建HTTP处理函数,例如:
    func getUserHandler(w http.ResponseWriter, r *http.Request) {
        var userService UserService
        injector.Invoke(func(u UserService) {
            userService = u
        })
        id, err := strconv.Atoi(r.URL.Query().Get("id"))
        if err!= nil {
            http.Error(w, "Invalid ID", http.StatusBadRequest)
            return
        }
        user, err := userService.GetUserByID(id)
        if err!= nil {
            http.Error(w, "Error getting user", http.StatusInternalServerError)
            return
        }
        json.NewEncoder(w).Encode(user)
    }
    
    • 在处理函数中,通过injector.Invoke获取UserService的实例,然后使用该实例进行业务逻辑处理,最后将用户信息以JSON格式返回。
  5. 设置HTTP服务器

    • 最后设置HTTP服务器来处理请求:
    func main() {
        http.HandleFunc("/user", getUserHandler)
        log.Fatal(http.ListenAndServe(":8080", nil))
    }
    
    • 这里将getUserHandler绑定到/user路径,启动HTTP服务器监听8080端口。