优化查询逻辑

This commit is contained in:
ivy1996-encode 2021-03-15 18:51:46 +08:00
parent 1e26e9bf20
commit 3d1b9e7973
2 changed files with 147 additions and 0 deletions

View File

@ -36,7 +36,55 @@ func (f Friends) Count() int {
return len(f)
}
func (f Friends) SearchByUserName(username string) (results Friends, found bool) {
for _, friend := range f {
if friend.UserName == username {
found = true
results = append(results, friend)
}
}
return
}
func (f Friends) SearchByNickName(nickName string) (results Friends, found bool) {
for _, friend := range f {
if friend.NickName == nickName {
found = true
results = append(results, friend)
}
}
return
}
func (f Friends) SearchByRemarkName(remarkName string) (results Friends, found bool) {
for _, friend := range f {
if friend.User.RemarkName == remarkName {
found = true
results = append(results, friend)
}
}
return
}
func (f Friends) Search(cond Cond) (friends Friends, found bool) {
if len(cond) == 1 {
for k, v := range cond {
switch k {
case "UserName":
if value, ok := v.(string); ok {
return f.SearchByNickName(value)
}
case "NickName":
if value, ok := v.(string); ok {
return f.SearchByNickName(value)
}
case "RemarkName":
if value, ok := v.(string); ok {
return f.SearchByUserName(value)
}
}
}
}
for _, member := range f {
value := reflect.ValueOf(member).Elem()
for k, v := range cond {
@ -106,7 +154,57 @@ func (g Groups) Count() int {
return len(g)
}
func (g Groups) SearchByUserName(username string) (results Groups, found bool) {
for _, group := range g {
if group.UserName == username {
found = true
results = append(results, group)
}
}
return
}
func (g Groups) SearchByNickName(nickName string) (results Groups, found bool) {
for _, group := range g {
if group.NickName == nickName {
found = true
results = append(results, group)
}
}
return
}
func (g Groups) SearchByRemarkName(remarkName string) (results Groups, found bool) {
for _, group := range g {
if group.User.RemarkName == remarkName {
found = true
results = append(results, group)
}
}
return
}
func (g Groups) Search(cond Cond) (groups Groups, found bool) {
if len(cond) == 1 {
for k, v := range cond {
switch k {
case "UserName":
if value, ok := v.(string); ok {
return g.SearchByNickName(value)
}
case "NickName":
if value, ok := v.(string); ok {
return g.SearchByNickName(value)
}
case "RemarkName":
if value, ok := v.(string); ok {
return g.SearchByUserName(value)
}
}
}
}
for _, member := range g {
value := reflect.ValueOf(member).Elem()
for k, v := range cond {

49
user.go
View File

@ -307,7 +307,56 @@ func (m Members) searchByUserNameLimit1(username string) (*User, error) {
return nil, errors.New("no such user found")
}
func (m Members) SearchByUserName(username string) (results Members, found bool) {
for _, member := range m {
if member.UserName == username {
found = true
results = append(results, member)
}
}
return
}
func (m Members) SearchByNickName(nickName string) (results Members, found bool) {
for _, member := range m {
if member.NickName == nickName {
found = true
results = append(results, member)
}
}
return
}
func (m Members) SearchByRemarkName(remarkName string) (results Members, found bool) {
for _, member := range m {
if member.RemarkName == remarkName {
found = true
results = append(results, member)
}
}
return
}
func (m Members) Search(cond Cond) (results Members, found bool) {
if len(cond) == 1 {
for k, v := range cond {
switch k {
case "UserName":
if value, ok := v.(string); ok {
return m.SearchByNickName(value)
}
case "NickName":
if value, ok := v.(string); ok {
return m.SearchByNickName(value)
}
case "RemarkName":
if value, ok := v.(string); ok {
return m.SearchByUserName(value)
}
}
}
}
for _, member := range m {
value := reflect.ValueOf(member).Elem()
for k, v := range cond {