Niko
что-то я не могу подружиться с go - OOP после php
Несколько другое поведение объектов, переданных в методы
Anatoly
Alexey 〒.
Niko
@anatolijs Да. Меня указатели вообще с толку сбивают. И не совсем понимаю как работать с интерфейсами вне пакетов, где они были объявлены
Niko
@anatolijs в Go есть пустые интерфейсы, которые не имеют объявленных методов
У меня в авторизации есть пакет apis с пустым интерфейсом.
// Identity represents an authenticated user. If a user is successfully authenticated by
// an auth handler (Basic, Bearer, or Query), an Identity object will be made available for injection.
type Identity interface{}
Когда я нахожу в db пользователя по запрашиваемому Bearer token - то в авторизации происходит следующее
func(c *routing.Context, token string) (apis.Identity, error) {
if len(token) > 0 {
userDAO := daos.NewUserDAO()
service := services.NewUserService(userDAO)
user, err := service.GetByAuthKey(c, token)
if err == nil {
return apis.Identity(user), nil
}
Не понимаю для чего здесь нужен пустой интерфейс и как это потом использовать
Anatoly
Alexey
> interface{} тракруется как "все что угодно"
привет из php|javascript
Niko
@anatolijs Я недавно начал изучать go, поэтому еще не привык к работе с ним
Спасибо за помощь
Anatoly
Anatoly
а то я здесь только пока холивары наблюдаю
Niko
@ngalayko т.е. я не имплементирую интерфейс, чтоб он "вынуждал" меня написать методы, а наоборот - пишу методы, чтоб структура подошла под нужный интерфейс?
nikita
смотря для чего
ты просто явно не указываешь, что какая-то структура имплементирует какой-то интерфейс
Anatoly
Интерфейс определяет контракт и используется для конкретизации того, что можно ожидать от объекта. А "утиная" типизация просто упрощает описание типа и не требует указывать какой интерфейс этот тип исповедует.
Anatoly
под interface {} подойдет все, поскольку этот интерфейс не накладывает никаких ограничений
Niko
спасибо за разъяснения
Буду разбираться
Мерль
Anonymous
https://habrahabr.ru/post/318896/
что скажете?
Pawel
Rust
да. ну он маргинальный в данный момент и мне не нравится.
ceiling cat
Niko
@antelman какая-то маленькая слабенькая статейка)
Anonymous
@antelman какая-то маленькая слабенькая статейка)
я имел в виду не это, когда спрашивал мнения )
разверну:
работал ли кто-то с живой перезагрузкой, например вариант из статьи - какие наблюдения?
потому что теоретически тема очень сильная - перезапуск процесс ресурсоемкая задача, если найти как обновляться без перезапуска, то это хороший выйгрыш имхо
Vasily
Есть у фейсбука в паблике модуль для грейсфула
Vasily
с передачей listner-а
Vasily
Это рабочий подход котоырй много где используется
Vasily
В статье там написано что это proof of concept и то что он не thread-safe, т.е. при нагрузке бомбанёт скорее всего
Niko
мне кажется без использования каки-либо либ js ты страницу никак не перезагрузишь
React или Vue без перезугрузки работает со всеми данными, получив их при первой загрузке страницы с сервера, ajax тоже возвращает данные с сервера и js их видит
Чтоб в Go такое сделать - вероятней всего нужно клиенту сокеты слушать или давать запрос с какой-то периодичностью
Я пока не задавался таким вопросом
Aleksandr
Aleksandr
в статье об изменении кода приложения без его перезагрузки/перекомпиляции
Мерль
Anonymous
Прикольно, но зачем?
Не стопать не стартовать процессы, если их 100500 на каждом из 100500 серверов и каждый ещё держит по 100500 коннектов к 100500 базам, то все это стопнуть и снова поднять - затратно
Pawel
Anonymous
причем очень простой по функциональности
Anonymous
вопрос в том, что если пропускная способность огромная, то система сильно размасштабированна и там рестарт все это пиздец
Vasily
грейсфул как раз решает эти проблемы
Vasily
нормальный грейсфул
Anonymous
Vasily
грейсфул как работает
Vasily
сначала поднимается новый сервис
коннектится ко всем базам, валидирует конфиг ( что всё ок, доступы ок )
Vasily
потом только он забиарет lisner у старого сервиса и начинает слушать его
Vasily
старый дорабатывает коннекты котоыре в нём и дохнет
Aleksandr
https://www.reddit.com/r/golang/comments/737i4w/challenge_to_advanced_api_architecture_in_go/
Vasily
для http и grpc ( unary call, stream не пробовал ) работае у нас на ура под нагрузкой
Anonymous
Pawel
обычно процесс получает сигнал "рестартани", освобождает все ресурсы, синхронно запущает копию своего бинарника и благополучно закрывается. ни единой проблемы не вижу
Vasily
Lanegan
Кто-нить пользовал в деле кластер на kubernetes?
Alexander
Кубер для мальчиков. Для настоящих мужчин есть dcos)
Vasily
Ivan
Vladimir
Vasily
смелые вы
Vladimir
смелые вы
сервис такой что легко взять и в продакшн выкатить бинарь собранный свежей бетой го. Упадет - не страшно
Vladimir
или с каким-нибудь эксперементальным пакетиком
Vladimir
Vladimir
иначе люди заметят
Vladimir
будет пара сотен миллисекунд когда он не отвечает
Vladimir
все эти извраты нужны чтобы люди не заметили рестарта
Vladimir
типа коннекты просто слегка притормозились, но все старые отдали ответы, все новые тоже обработались
Vladimir
смелые вы
у нас вообще местами странный бардак. Мне кажется что я один форсю написание тестов на код
Vladimir
например
Vladimir
(свой код стараюсь хотя бы на 80% тестами покрывать)
Vladimir
но с другой стороны железо есть и есть свобода действия. Поэтому пока можно мириться
Lanegan
Lanegan
Для сервисов на grpc в качестве балансера haproxy пойдет?
Vladimir
Кстати кто-нибудь gRPC Stream'ы использовал? А то про них что-то нифига нет информации нигде