Wissance / Ferrum

Simple Go OpenId authorization server with Keycloak compatible API
https://wissance.github.io/Ferrum/
Apache License 2.0
5 stars 4 forks source link

Fixed panics when working with redis (#40) #41

Closed awsoremod closed 11 months ago

awsoremod commented 11 months ago

Тут было несколько фундаментальных проблем.

  1. указатель на nil не равен nil. Переписал приватные функции, чтобы при ошибках они возвращали - не nil с указателем на nil. А чтобы возвращали сам указатель, который равен nil.
  2. Кажется нет смысла возвращать указатель на slice. Так как slice сам по себе весит 24 байт. (8 - len, 8 - cap, 8 - адрес на массив). Убрал в возвращаемых значениях указатели на slice во всем проекте.
  3. Собственно из - за того что возвращались указатели на slice. Заместо проверки len(slice) != 0 были проверки slice != nil . Что тоже неправильно, так как из функции может вернуться slice нулевой длины (что у нас и было в некоторых моментах). А также у нас были указатели на нулевой slice, и тогда slice != nil -> false (надо было бы проверять *slice != nil -> true). Чтобы не зависеть от приватных функций, нужно проверять len(slice) == 0 (если slice равен nil, ответ будет true, len() работает с nil корректно).

Также в одном месте добавил swtich case заместо if'ов.

EvilLord666 commented 11 months ago

Поправил конфлиты, необходимо испытать методы, т.к. там есть 1 неприятная штука, связанная с CreateUser

EvilLord666 commented 11 months ago

Проверено: