Anatoly
https://play.golang.org/p/KidfpgV99J вот так не работает
в этом случае, надо будет через var интерфейс явно, как я показал выше
Axm
в этом случае, надо будет через var интерфейс явно, как я показал выше
фигово, чтобы дальше использовать v, придется кастовать обратно в структуру
Niko
что-то я не могу подружиться с go - OOP после php Несколько другое поведение объектов, переданных в методы
Daniel
фигово, чтобы дальше использовать v, придется кастовать обратно в структуру
эта проблемва говорит о неудачном дизайне. надо придумать, как не кастовать
Axm
эта проблемва говорит о неудачном дизайне. надо придумать, как не кастовать
я готов выслушать советы, как удачно сделать дизайн взаимодействия вот с таким апи: http://download.automation.odin.com/oa/7.0/oapremium/portal/en/billing_api_reference/75178.htm
Niko
@anatolijs Да. Меня указатели вообще с толку сбивают. И не совсем понимаю как работать с интерфейсами вне пакетов, где они были объявлены
Anatoly
@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 } Не понимаю для чего здесь нужен пустой интерфейс и как это потом использовать
Alexey
> interface{} тракруется как "все что угодно" привет из php|javascript
Niko
@anatolijs Я недавно начал изучать go, поэтому еще не привык к работе с ним Спасибо за помощь
nikita
@anatolijs Я недавно начал изучать go, поэтому еще не привык к работе с ним Спасибо за помощь
в го утиная типизация, то есть, если у объекта есть все методы интерфейса - он удовлетворяет этому интерфейсу у любого объекта есть 0 методов - так что пустой интерфейс это все, что угодно
Anatoly
а то я здесь только пока холивары наблюдаю
Niko
@ngalayko т.е. я не имплементирую интерфейс, чтоб он "вынуждал" меня написать методы, а наоборот - пишу методы, чтоб структура подошла под нужный интерфейс?
nikita
смотря для чего ты просто явно не указываешь, что какая-то структура имплементирует какой-то интерфейс
Anatoly
Интерфейс определяет контракт и используется для конкретизации того, что можно ожидать от объекта. А "утиная" типизация просто упрощает описание типа и не требует указывать какой интерфейс этот тип исповедует.
Anatoly
под interface {} подойдет все, поскольку этот интерфейс не накладывает никаких ограничений
Niko
спасибо за разъяснения Буду разбираться
Anonymous
https://habrahabr.ru/post/318896/ что скажете?
Pawel
Rust
да. ну он маргинальный в данный момент и мне не нравится.
ceiling cat
https://habrahabr.ru/post/318896/ что скажете?
о, прикольно. а есть кстати живая перезагрузка конфига в viper ещё вроде
Anonymous
о, прикольно. а есть кстати живая перезагрузка конфига в viper ещё вроде
там вроде даже вотчер можно поставить на изменения в файле, но это ж просто текстовый файл. перезагрузка кода совсем другого порядка задача )
ceiling cat
там вроде даже вотчер можно поставить на изменения в файле, но это ж просто текстовый файл. перезагрузка кода совсем другого порядка задача )
Да, я это и имел ввиду, что значения конфига переписываются (насколько мне известно), но сама программа не перекомпиливается
Niko
@antelman какая-то маленькая слабенькая статейка)
Anonymous
@antelman какая-то маленькая слабенькая статейка)
я имел в виду не это, когда спрашивал мнения ) разверну: работал ли кто-то с живой перезагрузкой, например вариант из статьи - какие наблюдения? потому что теоретически тема очень сильная - перезапуск процесс ресурсоемкая задача, если найти как обновляться без перезапуска, то это хороший выйгрыш имхо
Vasily
Есть у фейсбука в паблике модуль для грейсфула
Vasily
с передачей listner-а
Vasily
Это рабочий подход котоырй много где используется
Vasily
В статье там написано что это proof of concept и то что он не thread-safe, т.е. при нагрузке бомбанёт скорее всего
Niko
мне кажется без использования каки-либо либ js ты страницу никак не перезагрузишь React или Vue без перезугрузки работает со всеми данными, получив их при первой загрузке страницы с сервера, ajax тоже возвращает данные с сервера и js их видит Чтоб в Go такое сделать - вероятней всего нужно клиенту сокеты слушать или давать запрос с какой-то периодичностью Я пока не задавался таким вопросом
Aleksandr
в статье об изменении кода приложения без его перезагрузки/перекомпиляции
Pawel
https://habrahabr.ru/post/318896/ что скажете?
не работает. вызывает внезапные жуткие сегфолты в стиле "кровь кишки распидарасило"
Мерль
Anonymous
Прикольно, но зачем?
Не стопать не стартовать процессы, если их 100500 на каждом из 100500 серверов и каждый ещё держит по 100500 коннектов к 100500 базам, то все это стопнуть и снова поднять - затратно
Anonymous
а микросервисы не для этого ли придумали?
это может быть 1 процесс, раскопированный очень много раз.
Anonymous
причем очень простой по функциональности
Anonymous
вопрос в том, что если пропускная способность огромная, то система сильно размасштабированна и там рестарт все это пиздец
Vasily
грейсфул как раз решает эти проблемы
Vasily
нормальный грейсфул
Pawel
вопрос в том, что если пропускная способность огромная, то система сильно размасштабированна и там рестарт все это пиздец
да, но оно хотя бы работает в отличие от этой monkey. У меня она работала до того момента, пока не импортнёшь "runtime/cgo"
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 не пробовал ) работае у нас на ура под нагрузкой
Pawel
обычно процесс получает сигнал "рестартани", освобождает все ресурсы, синхронно запущает копию своего бинарника и благополучно закрывается. ни единой проблемы не вижу
Anonymous
А какую проблему реашем ?
обновлять код как можно менее ресурсо-затратно
Lanegan
Кто-нить пользовал в деле кластер на kubernetes?
Alexander
Кубер для мальчиков. Для настоящих мужчин есть dcos)
Vasily
Ivan
Кто-нить пользовал в деле кластер на kubernetes?
А какой вопрос? Есть даже чатик отдельный
Vladimir
В статье там написано что это proof of concept и то что он не thread-safe, т.е. при нагрузке бомбанёт скорее всего
У нас уже год он работает достаточно нормально, чтобы его не замечать.
Vasily
смелые вы
Lanegan
А какой вопрос? Есть даже чатик отдельный
Строю микросервисы в первый раз, выбираю стек :) кругом хайпят эти кубы, вот собственно на сколько хороши?
Vladimir
смелые вы
сервис такой что легко взять и в продакшн выкатить бинарь собранный свежей бетой го. Упадет - не страшно
Vladimir
или с каким-нибудь эксперементальным пакетиком
Vladimir
иначе люди заметят
Vladimir
будет пара сотен миллисекунд когда он не отвечает
Vladimir
все эти извраты нужны чтобы люди не заметили рестарта
Vladimir
типа коннекты просто слегка притормозились, но все старые отдали ответы, все новые тоже обработались
Ivan
Строю микросервисы в первый раз, выбираю стек :) кругом хайпят эти кубы, вот собственно на сколько хороши?
Да в целом хорошая штука. К сожалению сравнений с другими вариантами типа мезоса не смогу дать. Но вот есть тут такая штука - helm. Прям хорошо упрощает конфигурацию.
Vladimir
смелые вы
у нас вообще местами странный бардак. Мне кажется что я один форсю написание тестов на код
Vladimir
например
Vladimir
(свой код стараюсь хотя бы на 80% тестами покрывать)
Vladimir
но с другой стороны железо есть и есть свобода действия. Поэтому пока можно мириться
Lanegan
Lanegan
Для сервисов на grpc в качестве балансера haproxy пойдет?
Vladimir
Кстати кто-нибудь gRPC Stream'ы использовал? А то про них что-то нифига нет информации нигде
Ivan
Его самого тогда придется в кластер запихнуть, если локально пользовать ? Helm вообще в первый раз услышал :[
Не понял, кого именно в кластер запихнуть? Helm это как пакетный менеджер, только пакет в данном случае - описание установки в куб какого-нибудь сервиса. Haproxy вначале использовали для http, но потом в ингрессе что-то нужное появилось и вместо ha везде nginx.