package commands import ( "errors" "redisClone/pkg/core" ) func Lpop(args []string, getShard func(k string) *core.Shard) interface{}{ key := args[1] s := getShard(key) item, exists := s.Data[key] if !exists { return nil } typedList, ok := item.Value.([]string) if !ok { return errors.New("WRONGTYPE Operation against a key holding the wrong kind of value") } if len(typedList) == 0 { return nil } newItem := typedList[0] newList := typedList[1:] if len(newList) <= 0 { delete(s.Data, key) } else { s.Data[key] = core.Item{Value: newList} } return newItem }