| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 | package serviceimport (	"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 interfacetype UserDetailsService interface {	// Get UserDetails By username	GetUserDetailByUsername(ctx context.Context, username, password string) (model.UserDetails, error)}//UserService implement Service interfacetype 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,	}}
 |