Alexander
https://gist.github.com/valinurovam/e9e81a1a81b9e627ef0d8d0ed81bcc85 https://gist.github.com/valinurovam/1207667debf4438037b0588f36624c9e
Alexander
пока разместил на гисте
Alexander
dunhillmq - сама либа, main - использование
Alexander
пинать можно(нужно) сильно =)
Nikita
пинать можно(нужно) сильно =)
именованые возвращаемые значения надо оч осторожно использовать, ибо можно очень легко потерять то, что хотел бы вернуть из функции
Alexander
именованые возвращаемые значения надо оч осторожно использовать, ибо можно очень легко потерять то, что хотел бы вернуть из функции
это про (exchange *Exchange, err error), например? Если честно, мне они вообще не нравятся, но постоянно вижу такое у других, в книгах - поэтому использую
Alexander
видимо какое-то best practices, раз все используют
Nikita
это про (exchange *Exchange, err error), например? Если честно, мне они вообще не нравятся, но постоянно вижу такое у других, в книгах - поэтому использую
Именованые возвращаемые значения полезны, например, когда функция, к примеру, может возвращаеть (int, int, error), чтобы понимать чем первое значение от второго отличается по названию
Nikita
А так у тебя исчерпывающе очевидно, что *Exchange - это exchange, а err - error
Alexander
еще такой созрел вопрос, пока писал, обязательно ли всегда переопределять стандартные типы, например type ExchangeName string показалось, что это вносит больше неудобства, чем удобства
Nikita
понял, спасибо
ну хороший пример, например sync.Map Есть метод func (m *Map) Load(key interface{}) (value interface{}, ok bool) если бы bool не был именованым значением, тебе бы возвращалось какое-то true или false, и вообще непонятно, что оно значит
Салтыдык
Если много return'ов в функции, то именовать возвращаемые значения тоже иногда удобно. И везде просто пишешь return без перечислений
Nikita
еще такой созрел вопрос, пока писал, обязательно ли всегда переопределять стандартные типы, например type ExchangeName string показалось, что это вносит больше неудобства, чем удобства
Свои кастомные типы нужны, если хочешь их расширять, ибо над ExchangeName ты можешь объявить методы. Лучше оставлять примитивный тип как есть, либо как вариант использовать type alias type ExchangeName = string Тогда не надо пердолиться с конвертацией
Nikita
про алиасы не знал, спасибо, как раз попердолился немного
Просто когда ты используешь алиас типов и тебе надо вернуться обратно в string, тебе не надо делать string(fromMyCustomType)
Alexander
да, у меня как раз есть такое место от которого дико батхертило, ведь и так понятно что там string, зачем конвертировать if rxp.MatchString(string(message.RoutingKey)) { queueNames = append(queueNames, queueName) }
Je
Просто когда ты используешь алиас типов и тебе надо вернуться обратно в string, тебе не надо делать string(fromMyCustomType)
Прикольно, а если я от какой-то стандартной структуры, скажем time.Time хочу свой тип, есть разница между заюзать этот alias и embedded этой структуры?
Nikita
Прикольно, а если я от какой-то стандартной структуры, скажем time.Time хочу свой тип, есть разница между заюзать этот alias и embedded этой структуры?
Ну смотри, расширить тип создавая новую структуру и просто создавая тип поверх уже существующей структуры - совершенно разные вещи. Если ты делаешь type MyTime time.Time, func(t MyTime) MyNow() {}, ты можешь обратно вернуться к time.Time(instanceMyTime) Если делаешь type MyTime struct { time.Time }, то такой фокус уже не прокатит, но ты можешь получить time.Time обратно myTimeInstance.Time
Je
Я так понимаю, alias вообще нельзя расширить, по спеке он содержит тот же набор методов
Nikita
Я так понимаю, alias вообще нельзя расширить, по спеке он содержит тот же набор методов
Да. Я алиасы использую больше для организации кода. Например есть разные модельки, они сейчас одинаковы, но я знаю что в будущем они будут меняться и я в другом пакете создаю алиас, а потом вместо алиаса по мере надобности уже делаю какой-то другой тип, очень удобно так думать наперед
Je
Ну такой себе подход, читаемость кода снижается, если моделек будет больше того, что ты можешь держать в голове - начнешь забывать, что это за типы и будешь постоянно подгружать контекст в голове
Je
Случаем никто еще не пробовал этот или подобные кодогенераторы для тестов? именно в этом мотивация писать интерфейсы и генерация по ним моков https://medium.com/percolate-engineering/introducing-charlatan-df9b5d3d3107
Vladislav
Алиасы нужны для рефакторинг а постепенного.
Vladislav
А не для рядового использования когда лень конвертировать.
Vladislav
Для констант типа ACK и REQUE лучше б iota использовать. Зачем ты ввел типы на имена вообще непонятно. ИМХО - Для функции Consume лучше давать пользователям передавать каналы внутрь, а не создавать самому, они могут быть буфферизированным и т.п. Мапы с ключом - указателем тоже непонятно зачем.
Alexander
а чем в iota лучше? По типам объяснил выше, что вижу так делают везде, стоит ли менять их на алиасы или вообще оставить обычный string?
Alexander
> Мапы с ключом - указателем тоже непонятно зачем. такой один мап да, пока не могу найти объяснение :)
Alexander
про каналы понял, да, будет здраво если пользователь сам настроит канал как хочет
Oleh
подскажите пож каким образом можно мокнуть http.Get(url string)?
Pawel
кто в исландию поедет на gopherconf?
Ivan
Я бы работать туда поехал, нет вакансий?))
Pawel
Работы меньше, вилки больше. Для меньшинств всё на порядок
Fedor
Работы меньше, вилки больше. Для меньшинств всё на порядок
И никаких людей в округе, просто рай для программиста
Slava
вроде как очень дорого там жить
Slava
и скучновато
Cat
согласен, другое дело в России — с постоянными блокировками не заскучаешь /offtop
Slava
Везде есть свои минусы ;)
Anonymous
я бы хоть куда-нить поехал
Anonymous
пока на выезд блокировок нету
🏁Александр
+++
Anonymous
У кого есть какие выходы на Европу-США? Можем спротиться в команду, продавать услуги там. Есть кто знакомый прожекты, сейлзы с инглишем? Что думаете, сможем скооперироваться?
🏁Александр
надо регать LLC, но есть нюанс
Anonymous
а в \чём проблема его регать?
Anonymous
регнули всех, запросили визы на себя
🏁Александр
как только ты зарегал, ты попадаешь как резидент в рф (не путать с гражданством) под закон как "лицо контролирующее зарубежные компании"
🏁Александр
и ты обязан сообщить об этом факте и факте открытия счета..
🏁Александр
и дальше сами понимаете 100500 бумажек
Myla
в Беларуси найдите того, кто хочет юр лицо открыть и через него
Anonymous
я про то, что компанию открыть - не затем чтобы в РФ потом о ней отчитываться, а затем, чтобы сделать лыжи.
Anonymous
регнуть можно фиктивную компанию на аборигена, чтобы получить визы. а потом нормальную контору регнуть для фиксирования прибыли на коллектив
Anonymous
варианттов масса
Anonymous
можно самим поехать, и подтягивать дальше братушек с Рф, Укр, Бу, откуда угодно
🏁Александр
ну вообщем что бы совсем легально это сделать, надо выйти из резиденстсва
🏁Александр
как вариант отьехать на острова на пол года, а потом уже открывать
🏁Александр
сам факт выезда не дает тебе "выход из резиденства"
🏁Александр
надо пол года там сидеть минимум
Anonymous
а зачем он мне нужен, если я уже выехал?
Anonymous
они что, поедут за мной ччтоле?
🏁Александр
ты сам приедешь как бэ
Ivan
регнуть можно фиктивную компанию на аборигена, чтобы получить визы. а потом нормальную контору регнуть для фиксирования прибыли на коллектив
Проблема в выдаче голубой карты или рабочей визы, государство проекрит какач компания делает и запрос и просто не даст никому ничего
Anonymous
мм.. зачем?
🏁Александр
наверняка тут родственники и прочее, в страну то ездить придется
Anonymous
🏁Александр
в америку/европпу ехать без хорошего капитала это все равно что блин по туристической скататься туда-суда
🏁Александр
там нужно будет кормить всяких "имиграционных адвокатов", "юристов", "пошлины и прочие расходы"
🏁Александр
а пошлины там не 2000 рублей как у нас
Anonymous
конечно нужно, как без этого
Valeriy
на примере Чехии могу сказать что по ИП очень сложно получить визу, будете годами туда сюда кататься по коридору в 90 дней на пол года
Valeriy
*предпринимательскую визу