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
func NewUser(id int, name string) *User{ return &User{id:id,name:name: channel : make(chan string)} }
а это нормально, если передать указатель в функции-конструктор?
Daniel
А?!
Васильев Виктор
мммм...еще раз? Я не понял вопроса
Daniel
И?
Илья
а что не так?
arkady
не будет утечки памяти изза этого?
Daniel
:)
Илья
:O
arkady
:) извините, просто хочется писать хороший код, поэтому на берегу уточняю
Васильев Виктор
Все ок. лучше уточняй)
Васильев Виктор
Глупых вопросов не бывает. Бывают глупые люди котоыре не задают вопросы
Daniel
И вопросы о базовых концепциях
arkady
Раньше никогда не сталкивался с указателями и ссылками
Васильев Виктор
Утечки памяти в го регулируются сборщиком мусора. Если ссылка эта не будет использоваться то ее соберут с мусором
Илья
go - язык с gc, тут есть внутренние косяки (типа бакетов в map, которые не освобождаются, или особенности работы со строками, которые могут мешать gc), но если что-то утекает - то это go рутины
Васильев Виктор
да да я знаю
Васильев Виктор
я общий случай говорю
arkady
Хорошо, всем спасибо за разъяснение!
Daniel
Раньше никогда не сталкивался с указателями и ссылками
ну вот имеет смысл поднять весь этот пласт прежде, чем приниматься за программирование
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
Daniel
"Single Entry, Single Exit" was written when most programming was done in assembly language, FORTRAN, or COBOL
о, это да. когда на ассемблере пишешь обработчик прерывания - single exit очень помогает, потому, что там надо еще кое что перед завершением сделать. но это не про нас же
Илья
есть несколько тредиков по поводу 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
панятна
.
Для того чтобы запустить несколько скриптов в Travis CI, надо прописать нечто похожее в конфиг? deploy: - provider: script script: ./script/deploy.sh; ./script/something-else.sh
Sergey
Коллеги, приветствую. После Java данный язык оказался крайне привлекательным для меня. Но есть куча вопросов по организации структуры кода. А именно положения моих структур. Можете направить что почитать? Официальную документацию читаю и перечитываю. Но хотелось бы что-то более узконаправленное. Именно на структуризацию.
Sergey
Открываете какойнибудь проект на гитхабе и смотрите.
Да, но кому верить, хочется найти некий стандарт. Быть может книги посоветуете?
Sergey
по-конкретнее бы.
Как корректно расположить свои структуры являющие собой часть ORM по отношению к модулю работы с СУБД. В отдельном пакете, в том же? Хочется найти некий свод правил, стандартов.
Oleg
Спасибо!
еще есть такое https://talks.bjk.fyi/bketelsen/talks?p=gcru18-best#/