
Marlik
12.02.2018
20:58:49

The
12.02.2018
20:59:22
в этом примере, обработчики ошибок надо выносить куда-то в другую функцию.
я вообще у себя делал такую портянку, просто жесть
на контекстах

Google

The
12.02.2018
20:59:53
4 запроса в базы,
у каждой горутины есть контект, если там нету основных данных, она закрывает

Alexey
12.02.2018
21:00:18
А вообще скорее всего проблемы из-за того, что ReturnHash(db) не возвращает sql.ErrNoRows, а возвращает что-нибудь ещё)

vktr
12.02.2018
21:00:20

The
12.02.2018
21:00:29
и там уже решаем ошибка 404 или 500 или что-то другое.

Marlik
12.02.2018
21:01:27

vktr
12.02.2018
21:01:57
Ок, раз мы исключили ErrNoRows. Мож у нас пробема с коннектом?

Marlik
12.02.2018
21:04:12
Проблемма только когда в базе нет ничего.

Alexey
12.02.2018
21:04:38
Если, конечно, ReturnHash не возвращает что-то там всегда, а не nil, err

vktr
12.02.2018
21:06:00
Давай просто принтнем fmt.Printf("%T %v",err,err)

The
12.02.2018
21:06:50
так у нас тут вернется errNoRows

Google

The
12.02.2018
21:06:54
потом идем в следующий блок
пишем p.Ya
он нил
топаем в рекавер
или что, хотите сказать, что в таблице есть данные?

vktr
12.02.2018
21:07:40

The
12.02.2018
21:07:58
ну так конечно паника, паника потому что err == sql.ErrNoRows нужно return
либо пусть структуру по значению вернет
я что-то не могу понять, в чем тут трабла

Alexey
12.02.2018
21:08:47

vktr
12.02.2018
21:08:56
Ок. Совет 1 - возвращать ошибку на любой еррор

Alexey
12.02.2018
21:09:00
Кто-то под веществами, а я завидую.

Человек
12.02.2018
21:09:27
Помогите с записью
Я ни как не могу восстановить свои пароли от Хрома, нашел решение - https://github.com/SaturnsVoid/Chrome-Password-Recovery/blob/master/Chrome%20Password%20Recovery.go но я хочу их записать в .txt файл, а записывает только последний высвеченый пароль, всего паролей около 100, записывает последний пароль в списке. Что делать?Код: https://pastebin.com/Dss3DPUj
Идет в цикле из-за этого и файл все время переписываеться, сначала один пароль записала, пересоздало, и другой пароль и т.д, как приостановить выполнения цикла и записать полностью все пароли я не знаю.

vktr
12.02.2018
21:09:36
Потом будет понятно что за ерррор и как с ни жить

Человек
12.02.2018
21:09:38
Пожалуйста

Marlik
12.02.2018
21:10:11

vktr
12.02.2018
21:10:36

Google

Marlik
12.02.2018
21:13:30
Так-то вроде описано, тут. https://marcesher.com/2014/10/13/go-working-effectively-with-database-nulls/ Но чот не помогло. Да и в хэндлер возвращать sql.NullString так себе...

vktr
12.02.2018
21:17:54

Marlik
12.02.2018
21:20:41

vktr
12.02.2018
21:23:16
я один такой, который не понимает, почемуб просто не упасть на ошибке, выдав все об ошибке? Или нынче модно флейм разводить. Упади на первой же ошибке и выдай о ней всё!

The
12.02.2018
21:32:14
кстати, настроил макрос в Goland на кнопку слева от Ctrl (вспомогательная), и теперь можно этот бойлерплейт одной клавишой делать: https://i.imgur.com/OCfzSDA.gifv
конечно можно и err<Tab>
но так чуть лучше, главное теперь приучить себя пользоваться такой штукой.

Marlik
12.02.2018
21:44:37

The
12.02.2018
21:44:45
да
как проигнорить поле в Scan в б.д.?
nil пройдет?
не пройдет

Aleksandr
12.02.2018
22:33:03
В запросе его не включать

Alik
12.02.2018
22:34:05
ну можно ещё создать переменную с типом interface{} и дать указатель на неё, но лучше конечно просто не включать это поле в запрос


The
12.02.2018
22:56:21
не хочется делать WHERE match against ORDER BY match against, не известно как mysql отреагирует на это, и как сделает запрос
но я кажется решил уже, сделал discard тип, который реализуется Scan, который возвращает nil ошибку и ничего не делает, и переменную создал.
а подскажите ещё кое-что, вот у меня есть три горутины, все три горутины идут в базу и каждая ищет в свой табличке, и есть канал results, куда каждая сливает результаты, потом мне нужно вычитать все из канала в переменную и отправить клиенту по HTTP.
и я что-то подгрузился, если я в хендлере сделаю wg.Wait(), то все подвиснет, так как с канала никто не читает.
если я создаем ещё одну горутину, то как мне узнать что в канал уже все записали, чтобы закрыть его?
помню что-то делал подобное, но не могу вспомнить как придумал тактично.
вроде типовая задачка, не хотелось бы ещё один wg делать


Vladimir
12.02.2018
23:13:26
можешь сделать еще один канал в который слать struct{}{} и считать сколько их пришло, ну например

Google

Vladimir
12.02.2018
23:13:35
или канал на каждую горутину и смотреть что он closed

The
12.02.2018
23:20:37

Aleksey
12.02.2018
23:21:01
подскажите пакет для рисования интерфейса
для вывода параметров на экране

Vladimir
12.02.2018
23:21:21
плюс в том что тут проще сделать таймауты и какую-нибудь странную логику
можно также параллельно обрабатывать результаты

The
12.02.2018
23:22:12
из someChan это мои результаты, т.е. ты предлагаешь что если их больше 20 допустим, прерываться?

Admin
ERROR: S client not available

The
12.02.2018
23:22:58
а я понял, это struct{}{} который

Vladimir
12.02.2018
23:23:00

The
12.02.2018
23:23:34
это какой-то context.WithCancel судя по всему

Vladimir
12.02.2018
23:23:47
поэтому логика таймаутов кастомная и на вот таком селекте с циклом

The
12.02.2018
23:23:59
да, я тоже вот думаю что-то сложно слишком )

Vladimir
12.02.2018
23:24:55
но вариант в целом и такой есть

The
12.02.2018
23:25:43
я пока набросал на двух wg, получается 3 горутины крутятся на одном wg, другая горутина на другом (ждет wg.Done() и закрывает канал), а основной handler просто делает range resultsChan и спокойно выходит когда другая горутина его закрывает, как-то так.
но чую что не элегантно как-то
хотя твой вариант с бесконечным цилком и select помоему ещё сложнее для понимания, разве что там таймером прибить можно, но у меня такой задачи не стоит пока.
спасибо за идеи

Google

/dev/null
13.02.2018
00:06:43

The
13.02.2018
00:17:25
господа, а context.WithTimeout возвращает cancel() функцию, я могу её собственно ручно дернуть?

Vladimir
13.02.2018
03:41:19
(сарказм)

The
13.02.2018
03:41:51
я уше нашел ответ))

Vladimir
13.02.2018
04:12:41
Ну чтоб и тут был - его и нужно руками дергать

The
13.02.2018
04:16:38
с таймаутом - не нужно
это WithCancel нужно
а с таймаутом на defer поставить на всякий случай
или я не прав?

Vladimir
13.02.2018
04:19:42
Ну в общем это твоя задача понять когда Контекст отменить

The
13.02.2018
04:20:58
а если у нас 3 контекста с таймаутом, вложенные в друг-друга, самый старший (самый родитель) отменяет все дочерние?
ну точнее не отменяет, а делает вызов cancel?

Vladimir
13.02.2018
04:23:20

The
13.02.2018
04:23:41
я ж вроде это и сказал)
я надеюсь дети не отменяют родителя?

Vladimir
13.02.2018
04:37:00
Не должны)

Александр
13.02.2018
06:25:35
Неед хелп, я туплю
https://play.golang.org/p/58y46jIEWaB
почему DataModel does not implement DataModelInterface (AddRequest method has pointer receiver)
в упор не вижу O_o