arkady
точней мне нужно, чтоб когда я написал
user1 := User{id: 2, name: "user 1"}
- у user1 уже был канал
Илья
func NewUser() *User ?
Васильев Виктор
Почему не функция конструктор?
Васильев Виктор
Вот да сверху
Васильев Виктор
только с параметрами иинициализации что тебе нужнв
arkady
Можно пример?
Илья
делаешь функцию, в которой инициализируешь канал создаешь структуру и возвращаешь её
Васильев Виктор
func NewUser(id int, name string) *User{
return &User{id:id,name:name: channel : make(chan string)}
}
arkady
Все спасибо, что-то затупил
arkady
Daniel
А?!
Васильев Виктор
мммм...еще раз? Я не понял вопроса
arkady
Daniel
И?
Илья
а что не так?
arkady
не будет утечки памяти изза этого?
Daniel
:)
Илья
:O
arkady
:) извините, просто хочется писать хороший код, поэтому на берегу уточняю
Васильев Виктор
Все ок. лучше уточняй)
Васильев Виктор
Глупых вопросов не бывает. Бывают глупые люди котоыре не задают вопросы
Daniel
И вопросы о базовых концепциях
arkady
Раньше никогда не сталкивался с указателями и ссылками
Васильев Виктор
Утечки памяти в го регулируются сборщиком мусора. Если ссылка эта не будет использоваться то ее соберут с мусором
Илья
go - язык с gc, тут есть внутренние косяки (типа бакетов в map, которые не освобождаются, или особенности работы со строками, которые могут мешать gc), но если что-то утекает - то это go рутины
Салтыдык
Васильев Виктор
да да я знаю
Васильев Виктор
я общий случай говорю
arkady
Хорошо, всем спасибо за разъяснение!
Eldar
подскажите, овер9000 ретурнов в одном методе это типа ок? всегда старался 1 ретурн вконце использовать
Eldar
это я сейчас либу nats открыл, и скажу что это выглядит довольно таки ужасно
Daniel
вообще, код, который делает return как можно раньше, легче понять
Daniel
стейт-машина в голове по-проще получается
Vladislav
Если можно в данный момент завершить функцию, то почему нет?
Eldar
что бы понять где из огромного кол-ва мест она завершилась)
Daniel
а?!
Daniel
Илья
Приборы? - 200 ! Что "200"? - А что "приборы"?
Daniel
я вот вспоминал, и не вспомнил, в какой базовой книжке написано, что return надо звать как можно раньше, раз уж позволено. никакого нет смысла тащить внимание читателя к последней строке, если уже ясно, что обработка завершена.
то ли керниган и ричи, то ли гради буч, что ли еще что-то такое же обязательное
Daniel
там же было написано, что, если ветвь нормальной обработки одна - она должна быть самой длинной, а по разным нештатным ситуациям сразу возврат
Artem
Имхо в clean code было
Daniel
а если нормальных ветвей несколько - их надо по отдельным функциям раскидывать
Maksim (Ellrion)
так же в книжке в какой то было и обратное мнение про 1 ретурн. но имхо оно уже давно устарело
Илья
"Single Entry, Single Exit" was written when most programming was done in assembly language, FORTRAN, or COBOL
Daniel
ну вот непонятно, в какой обратное. я такую не читал.
были языки, которые требовали одного ретёрна
Илья
https://softwareengineering.stackexchange.com/questions/118703/where-did-the-notion-of-one-return-only-come-from
Илья
есть несколько тредиков по поводу early return vs single return, первый, предпочтительнее
Илья
да, там пойнт в другом, по ссылке выше парень разворачивает мысль, что именно имелось ввиду, там можно было в тело функции прыгнуть из произвольного места, и из функции прыгнуть в произвольное место, но это не про single return statement
Илья
вообщем, с single return код читается проще, чем ветвистые else if или switch с кучей разных веток исполнения
Anonymous
Илья
с return ты уверен. что обработка закончилась
V
проблема множественных ретернов возникает когда брейк стоит и непонятно то ли в функу не зашел, то ли зашел, но вышел раньше
Илья
с ветвями, может быть в конце функции еще чтото будет происходить
Igor
early return обычно применяется "для валидации" - ранний выход из функций, если параметры заданы неверно https://arne-mertz.de/2016/12/early-return/
V
но очень часто в каком-нибудь js вместо раннего ретерна делают ранний throw и думай потом что лучше -_-
Igor
throw или return в данном случае равнозначны
Igor
Суть - как можно раньше покинуть поток исполнения, как визуально, так и программно
саша
> early return обычно применяется "для валидации" - ранний выход из функций, если параметры заданы неверно
Ранний return обычно применяется, когда в языке нормальной системы типов не завезли
Igor
(в случае если нельзя выполнять код дальше, неверные параметры и т.п.)
Daniel
саша
В том числе из-за этого приходится городить кучу валидаций
Igor
саша
> Скажи это Сишниками и явистам
Так у них отродясь нормальной системы типов небыло
Andrey
саша
алгебраические типы данных как минимум
Daniel
панятна
.
Для того чтобы запустить несколько скриптов в Travis CI, надо прописать нечто похожее в конфиг?
deploy:
- provider: script
script:
./script/deploy.sh;
./script/something-else.sh
Sergey
Коллеги, приветствую. После Java данный язык оказался крайне привлекательным для меня. Но есть куча вопросов по организации структуры кода. А именно положения моих структур. Можете направить что почитать? Официальную документацию читаю и перечитываю. Но хотелось бы что-то более узконаправленное. Именно на структуризацию.
Andrey
Zver
.
Daniel
Zver
Oleg
Sergey
по-конкретнее бы.
Как корректно расположить свои структуры являющие собой часть ORM по отношению к модулю работы с СУБД. В отдельном пакете, в том же? Хочется найти некий свод правил, стандартов.
Sergey
Oleg
Спасибо!
еще есть такое
https://talks.bjk.fyi/bketelsen/talks?p=gcru18-best#/