面试题答案
一键面试-
定义接口:
- 首先定义服务接口,例如如果是一个用户服务,定义如下:
type UserService interface { GetUserByID(id int) (User, error) }
- 这里
User
是自定义的结构体,代表用户信息。
-
创建具体实现:
- 实现上述接口,例如:
type UserServiceImpl struct { } func (u *UserServiceImpl) GetUserByID(id int) (User, error) { // 具体从数据库或其他数据源获取用户的逻辑 var user User // 数据库查询逻辑等 return user, nil }
-
创建注入器:
- 导入
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
接口。
- 导入
-
在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格式返回。
-
设置HTTP服务器:
- 最后设置HTTP服务器来处理请求:
func main() { http.HandleFunc("/user", getUserHandler) log.Fatal(http.ListenAndServe(":8080", nil)) }
- 这里将
getUserHandler
绑定到/user
路径,启动HTTP服务器监听8080端口。