面试题答案
一键面试思路
- 定义
UserService
接口,包含GetUser
方法。 - 定义
UserController
结构体,包含一个UserService
类型的字段,用于实现依赖注入。 - 为
UserService
接口创建不同的实现,比如生产环境和测试环境的实现。 - 在
UserController
的方法中通过依赖注入的UserService
实例调用GetUser
方法。
关键代码逻辑
// 定义UserService接口
type UserService interface {
GetUser() string
}
// 生产环境UserService实现
type ProductionUserService struct{}
func (p *ProductionUserService) GetUser() string {
return "Production User"
}
// 测试环境UserService实现
type TestUserService struct{}
func (t *TestUserService) GetUser() string {
return "Test User"
}
// 定义UserController结构体
type UserController struct {
userService UserService
}
// UserController的方法,依赖UserService
func (uc *UserController) GetUserInfo() string {
return uc.userService.GetUser()
}
使用示例
func main() {
// 生产环境
productionUC := &UserController{
userService: &ProductionUserService{},
}
println(productionUC.GetUserInfo())
// 测试环境
testUC := &UserController{
userService: &TestUserService{},
}
println(testUC.GetUserInfo())
}
在上述代码中,UserController
通过 userService
字段依赖 UserService
接口。在不同环境下,可以通过创建不同 UserService
实现的实例,并将其注入到 UserController
中来灵活切换实现。在 main
函数中展示了在生产环境和测试环境下的使用方式。