package service import ( "context" "errors" "github.com/longjoy/micro-go-course/section31/model" ) var ( ErrUserNotExist = errors.New("username is not exist") ErrPassword = errors.New("invalid password") ) // Service Define a service interface type UserDetailsService interface { // Get UserDetails By username GetUserDetailByUsername(ctx context.Context, username, password string) (model.UserDetails, error) } //UserService implement Service interface type InMemoryUserDetailsService struct { userDetailsDict map[string]*model.UserDetails } func (service *InMemoryUserDetailsService) GetUserDetailByUsername(ctx context.Context, username, password string) (model.UserDetails, error) { // 根据 username 获取用户信息 userDetails, ok := service.userDetailsDict[username]; if ok{ // 比较 password 是否匹配 if userDetails.Password == password{ return *userDetails, nil }else { return model.UserDetails{}, ErrPassword } }else { return model.UserDetails{}, ErrUserNotExist } } func NewInMemoryUserDetailsService(userDetailsList []*model.UserDetails) *InMemoryUserDetailsService { userDetailsDict := make(map[string]*model.UserDetails) if userDetailsList != nil { for _, value := range userDetailsList { userDetailsDict[value.Username] = value } } return &InMemoryUserDetailsService{ userDetailsDict:userDetailsDict, } }