在模拟 struct 中嵌入UserDao
接口,这样所有方法都会得到提升.仅实现所需的方法(实际将调用的方法):
type UserDao interface {
GetUser() (User, error)
GetUsers() ([]User, error)
}
type UserDaoMock struct {
UserDao
}
func (UserDaoMock) GetUser() (User, error) {
return User{}, nil
}
测试它:
var dao UserDao
dao = UserDaoMock{}
fmt.Println(dao.GetUser())
将输出(在Go Playground上try ):
{} <nil>
请注意,调用任何其他方法都会引起panic ,因为嵌入的UserDao
字段是nil
,所以它们后面没有真正的实现.但是UserDaoMock
实现了UserDao
,而GetUser()
方法实现了并且可以调用.
请参阅相关问题以检测哪些方法是可调用的:Go reflection with interface embedded in struct - how to detect "real" functions?
其他相关问题:
Is it possible to define an anonymous interface implementation in Go?
Visibility of embedded private interfaces in Go