@gogolang

Страница 1434 из 1630
Yo
21.09.2018
09:26:51
зарегайся на степике, получи некоммерческую лицензию
А если я там уже давно зареган, мне дадут лицуху? или предлагаете повторно другим мылом регаться? :)

Roman
21.09.2018
09:26:52
да любой редактор, который подсказки из gocodeможет светить ставишь и все. Для go более чем достаточно

Google
Mykyta
21.09.2018
09:27:14
Софт создают частные компании, цель которых - зарабатывать деньги. Это разумный эгоизм или нет?

Viktor
21.09.2018
09:27:38
Софт создают частные компании, цель которых - зарабатывать деньги. Это разумный эгоизм или нет?
При чем тут создание софта, если разговор про его неправомерное использование?

Dmitri
21.09.2018
09:27:55
каждому, прошедшему хотя бы один тест, автоматом падает лицуха на ПОЛНЫЙ, МЛЯ, ПАКЕТ джетбрейнсовских идешек.

Vladislav
21.09.2018
09:28:14
Софт создают частные компании, цель которых - зарабатывать деньги. Это разумный эгоизм или нет?
Я не сторонник всех идей Рэнд. Но насколько помню да. И вы вполне все это можете прочитать у нее.

Dmitri
21.09.2018
09:28:15
в первый раз на 2 недели, если за 2 недели пройдешь еще один тест - на 2 месяца

потом заходишь раз в 2 месяца на степик, и имеешь постоянно лицензию на некоммерческое использование любых джетбрейнсовских ИДЕ

Roman
21.09.2018
09:29:00
Dmitri
21.09.2018
09:29:25
При чем тут создание софта, если разговор про его неправомерное использование?
ну вот нахрена неправомерно использовать, если правомерно либо недорого/либо почти бесплатно

"почти бесплатно" - это стоимость трудового полчаса человека, у которого нет 500 руб. на инструмент

Google
Dmitri
21.09.2018
09:30:14
взломать, вашу маковку, дольше

Dk
21.09.2018
09:30:31
там это где?
Сам gocode, я его поставил на sublime, а потом он работать перестал. На гитхабе сказано, что исправлять проблему не будут – ставьте форк

Yo
21.09.2018
09:31:02
Плагин поставь для го
спасибо, не знал. Поставил на лиценизрованную IDEA, потом попробую.... Если функциональные возможности в IDEA + Go plugin равны GoLand , тогда GoLand можно будет удалить.

Alexander
21.09.2018
09:31:17
ну вот нахрена неправомерно использовать, если правомерно либо недорого/либо почти бесплатно
Только вот использование жидбрейновских Иде на работе по лицензии степике неправомерно

Dmitri
21.09.2018
09:31:39
Только вот использование жидбрейновских Иде на работе по лицензии степике неправомерно
собственно, как и использование любого другого тыренного софта

Alexander
21.09.2018
09:31:41
Хотя я сам так же ими пользуюсь

Daniel
21.09.2018
09:31:58
Коллеги, завязывайте, пожалуйста

Roman
21.09.2018
09:31:59
Сам gocode, я его поставил на sublime, а потом он работать перестал. На гитхабе сказано, что исправлять проблему не будут – ставьте форк
а, я не в курсе. Ну суть не меняется, что угодно, что обеспечивает подсказки и автодополнение, ну и быстрый переход к объявлению ставь и все

Dmitri
21.09.2018
09:32:04
если оно вам надо по работе, и организация не покупает вам инструмент - валите с такой работы к хренам

Daniel
21.09.2018
09:32:55
Взлом ПО - не воровство, его и так никто не собирался покупать

Roman
21.09.2018
09:33:14
как тут плюсануть?)

Daniel
21.09.2018
09:33:23
Но вранье - это стыдно, даже если про ПО

Yo
21.09.2018
09:34:08
Коллеги, завязывайте, пожалуйста
поддерживаю. Вчера пролистал >500 мессаг потока сознания про "вредность и/или полезность" Repository паттерна и т.д. - выхлоп/пользы нулевой.

Daniel
21.09.2018
09:35:12
Да я работал, чат не читал. Репозиторов надо было банить сразу

Алексей
21.09.2018
09:39:23
Щас бы банить за обсуждение паттернов и архитектуры.

Yo
21.09.2018
09:40:43
дадут
Хоть я уже и решил вопрос установкой Go plugin в IDEA... но похоже, если регистрация на Stepik.org уже была (а у меня уже давно была), то лицензию НЕ дадют. Пока НЕ залогинился было такое предложение, как сделал логин - не вижу где можно попросить ее, в профилях и на страницах - не нашел такого.

Dmitri
21.09.2018
09:42:21
еще раз: записываетесь на ЛЮБОЙ курс, доходите до первого тестового задания в курсе, проходите его, жмете "далее". С этого момента можно расслабиться и ждать письма с ключом

V
21.09.2018
09:42:51
го-плагин вроде как не поддерживается особо?

Dmitri
21.09.2018
09:44:01
платный поддерживается

но установить его можно только тогда, когда у тебя есть лицуха

Google
Dmitri
21.09.2018
09:44:22
на коммунити-версии не ставится

The
21.09.2018
09:49:29
func (r runner) stop() error { select { case <-r.stopChan: return errors.New("runner is stopped already") default: close(r.stopChan) return nil } } подскажите, в таком случае есть какая-то вероятность что выполнится блок с default если stopChan уже закрыт?

вроде как из закрытого канала возвращается immediately

но если с разных горутин вызовут stop(), будет плохо? или это потокобезопасно?

Artem
21.09.2018
09:51:31
но если с разных горутин вызовут stop(), будет плохо? или это потокобезопасно?
зачем городить флаг закрытия через каналы, если ты можешь просто сделать mutex

Vladislav
21.09.2018
09:52:16
Теоретически: канал открыт, оба потока это увидели, пошли по ветке дефолт и начали закрытэвать канал.

Artem
21.09.2018
09:52:35
вот это ^ тоже, да

The
21.09.2018
09:54:55
ну вот я сейчас 1000 горутин заспавнил, которые закрывают, с флагом --race. закрылся один раз, дата рейсов нет.

какой есть вариант дать возможность с разных горутин тормозить раннер?

Mykyta
21.09.2018
09:56:22
какой есть вариант дать возможность с разных горутин тормозить раннер?
закрытие канала лишь показывает, что данных с канала больше не придет. Закрывать ради закрытия его не нужно, это управляемый ресурс.

Artem
21.09.2018
09:56:28
какой есть вариант дать возможность с разных горутин тормозить раннер?
посмотри реализации GracefulShutdown у разных (http, grpc, ws и т.д.) хендлеров

The
21.09.2018
09:57:09
вроде раньше это было нормальной практикой в Go

эта штука у меня как раз выступает почти как context, только там немного логики будет дополнительной.

The
21.09.2018
09:58:15
эта защита от того, чтобы юзеры не дергали закрытие 100 раз

т.е. с разных мест прилетел stop(), но он выполнится один раз

Google
Mykyta
21.09.2018
09:58:39
во-во

Artem
21.09.2018
09:58:59
эта защита от того, чтобы юзеры не дергали закрытие 100 раз
что б сделать защиту, тебе нужно не ошибку, а панику кидать

The
21.09.2018
09:59:15
зачем мне кидать панику, ситуация полностью контролируемая

зачем тут паника?

Artem
21.09.2018
09:59:54
Mykyta
21.09.2018
09:59:59
зачем тут паника?
тебе же уже сказали юзать sync.Once, что тут еще обсуждать?)

Artem
21.09.2018
09:59:59
а логика подразумевает 1

Admin
ERROR: S client not available

The
21.09.2018
10:00:32
тебе же уже сказали юзать sync.Once, что тут еще обсуждать?)
окей, заюзаю sync.Once. забыл чето про него.

The
21.09.2018
10:03:33
нет, если закрывают много раз
это раннер определенных задач, он делает броадкаст в хаб где висят клиенты на вебсокете, каждый из них может сказать "СТОП" задаче, первый раз я стопаю задачу и говорю клиенту "Ок, задача останавливается". Все последующие задачи я возвращаю юзеру "Задача уже останавливается", до тех пор задача полностью не остановится, последующие вызовы стоп будут возвращать ошибку что задача не обнаружена. Мне кажется паника тут избыточна. Зачем её делать, чтобы потом ловить, если можно сразу ошибку вернуть.

а то что происходит внутри sync.Once это concurrent-safe? т.е. я могу из этой функции через замыкание менять состояние других переменных?

потому как мне нужен механизм уведомлений, что задача уже останавливается..

The
21.09.2018
10:04:26
окай, спасибо!

Vladislav
21.09.2018
10:06:04
да, там mx стоит внутри
Стоп. Если переменная не защищена и используется снаружи, то нельзя по-моему.

Artem
21.09.2018
10:07:31
какую-то сложную штуку тут городят

Виктор
21.09.2018
10:08:38
Всем привет. Задача такая. Необходимо переписать код получения данных от БД с преобразованием полученного значения в объект с кастомной структурой, который разросся и хочется все это убрать в одну функцию Из БД прилетает исключительно JSON, он валидный и все с этим норм Кастомных объектов может быть много, и есть много мест где нужно получить эти кастомные объекты Пока получилось такое: Сама функция (тут интересен момент преобразования json строки в объект): func (s *myService) processDbRequest(query string, response interface{}) (interface{}, error) { row, err := s.query(query) if err != nil { return nil, err } var jsonStr []byte if err := row.Scan(&jsonStr); err != nil { return nil, err } if err := json.Unmarshal(jsonStr, &response); err != nil { return nil, err } return response, nil } Есть код где я дергаю эту функцию: response := MyCustomType{} response, error := s.processDbRequest("SELECT ... FROM ...", response) и на выходе мне нужен мой кастомный тип: response.(MyCustomType) Проблема в том, что json.Unmarshal отрабатывает внутри функции и на выходе дает map[string]interface{}, который потом невозможно преобразовать в мой кастомный тип response.(MyCustomType) Как можно организовать код, чтобы мне на выходе получить объект нужного мне типа? Видится пока только вызов json.Unmarshal после выполнения функции, но это как-то костыльно чтоли.

Google
Artem
21.09.2018
10:08:48
я б копипастнул с http.Server.Shutdown()

поменяй на 1. func (s *myService) processDbRequest(query string, response interface{}) (error) 2. return nil 3. err := s.processDbRequest("SELECT ... FROM ...", &response)

Всем привет. Задача такая. Необходимо переписать код получения данных от БД с преобразованием полученного значения в объект с кастомной структурой, который разросся и хочется все это убрать в одну функцию Из БД прилетает исключительно JSON, он валидный и все с этим норм Кастомных объектов может быть много, и есть много мест где нужно получить эти кастомные объекты Пока получилось такое: Сама функция (тут интересен момент преобразования json строки в объект): func (s *myService) processDbRequest(query string, response interface{}) (interface{}, error) { row, err := s.query(query) if err != nil { return nil, err } var jsonStr []byte if err := row.Scan(&jsonStr); err != nil { return nil, err } if err := json.Unmarshal(jsonStr, &response); err != nil { return nil, err } return response, nil } Есть код где я дергаю эту функцию: response := MyCustomType{} response, error := s.processDbRequest("SELECT ... FROM ...", response) и на выходе мне нужен мой кастомный тип: response.(MyCustomType) Проблема в том, что json.Unmarshal отрабатывает внутри функции и на выходе дает map[string]interface{}, который потом невозможно преобразовать в мой кастомный тип response.(MyCustomType) Как можно организовать код, чтобы мне на выходе получить объект нужного мне типа? Видится пока только вызов json.Unmarshal после выполнения функции, но это как-то костыльно чтоли.
^

Виктор
21.09.2018
10:14:24
Так, ну я теперь не получаю из функции ответ от БД. В чем соль?

Artem
21.09.2018
10:14:45
он лежит в response

json.Unmarshal(jsonStr, &response) положит его response снаружи

Виктор
21.09.2018
10:15:08
А, по ссылке же, ща чекну

Artem
21.09.2018
10:15:16
ток нужно поправить json.Unmarshal(jsonStr, &response) на json.Unmarshal(jsonStr, response)

The
21.09.2018
10:18:04
Стоп. Если переменная не защищена и используется снаружи, то нельзя по-моему.
да, нельзя. можно попасть в кейс, когда первый if сработает, но уже запущен sync.Once

т.е. if isStopping { return errors.New("is stopping") } once.Do(func() { isStopping = true // закрываем })

Виктор
21.09.2018
10:21:40
The
21.09.2018
10:55:39
Да тут уже ясно что данный вариант не вариант

Мьютексы только

Mykyta
21.09.2018
10:58:03
Мьютексы только
Походу ясно это только тебе

The
21.09.2018
10:59:05
А тебе не ясно?

Mykyta
21.09.2018
10:59:43
А тебе не ясно?
Ну мля, в sync.Once и так мютекс лежит, зачем тебе изобретать велосипед?

The
21.09.2018
11:01:44
это вообще под эту задачу не подходит

покажи как ты изменишь состояние используя мьютекс внутри sync.Once, чтобы повторные действия возвращали ошибку

функция переданная в Do получившая переменные через замыкания попадает в дата рейс, если внутри stop будет проверка на статус .

Mykyta
21.09.2018
11:17:46
Ты напиши пример кода, а я тебе скажу, будет ли там датарейс, а то пока это все слишком абстрактно

Страница 1434 из 1630