
Andrey
20.07.2018
12:52:52
я же про то, что если вы пишите библиотеку, например, то передача error ничего не даст

Илья
20.07.2018
12:53:00
при том, что так работают с типизированными ошибками в go
https://dave.cheney.net/2016/04/27/dont-just-check-errors-handle-them-gracefully

Google

Andrey
20.07.2018
12:54:45
хорошая статья, читал когда-то
вы её тоже читали, надеюсь?

Anton
20.07.2018
12:56:43
всем доброго времени суток
есть структура
type MyTable struct {
name string
Id int
}
есть запрос в БД
SELECT name, array_agg(id) from my_tables group by name;
есть описанная модель в go-pg
Вопрос: Могу ли я получить array_agg через модель go-pg или придется делать обычный запрос через Exec или Query

Andrey
20.07.2018
12:57:36

Илья
20.07.2018
12:58:52

Andrey
20.07.2018
12:59:20
так мы с вами про типизированные ошибки спорим. нет разве?
просто вы дали этот совет как панацею

Илья
20.07.2018
12:59:45
вы думаете, каким именно образом, обеспечивается этот механизм?

Andrey
20.07.2018
13:04:37
ну ок, значит я вас неправильно понял. Я подумал, что вы предлагаете тупо возвращать тип, который удовлетворяет интерфейсу error

Илья
20.07.2018
13:06:34

Andrey
20.07.2018
13:07:55
я про второй вариант error types
помните, я говорил, что вызывающему каст придётся делать

Google

Andrey
20.07.2018
13:08:58
в-общем, не всё так просто
везде downsides

Илья
20.07.2018
13:11:12
если вызываещему не важно, какая ошибка произошла, ему делать ничего не нужно, если есть необходимость, вы можете сделать хелперы (пример из стандартной либы os я кидал выше), что за downsides, неясно, возвращать вы все равно будете интерфейс error, в чем у вас проблема я понял, называется nil interface, встречается не только при обработке ошибок, про это нужно знать

Антон
20.07.2018
13:12:25

Илья
20.07.2018
13:13:16

Антон
20.07.2018
13:15:03

Илья
20.07.2018
13:16:05
От функции зависит
в го такого нет, и аналогов паттерн матчинга по аналогии с растом/хаскелем/ерлангом местами и правда не хватает, но жить это не мешает

Антон
20.07.2018
13:17:53

Илья
20.07.2018
13:19:02
хм, все логично, если, в случае возникновения ошибки, вы не можете продолжить, и вам пришла неизвестная ошибка, которую вы не обработали, программа же должна упасть?

Антон
20.07.2018
13:22:57
хм, все логично, если, в случае возникновения ошибки, вы не можете продолжить, и вам пришла неизвестная ошибка, которую вы не обработали, программа же должна упасть?
Проблема в том, что в Go ты в принципе не можешь быть уверен, что обработал все ошибки, не смотря в код

Andrey
20.07.2018
13:23:18
в питоне с эксепшионами такая же фигня

Антон
20.07.2018
13:23:53

Andrey
20.07.2018
13:24:00
есть

Илья
20.07.2018
13:24:31

Andrey
20.07.2018
13:24:35
полная фраза
в питоне с эксепшионами ты в принципе не можешь быть уверен, что обработал все ошибки, не смотря в код
а если смотреть, то надо прям в весь код смотреть, и в тот, что вызываешь, тоже

Алексей
20.07.2018
13:27:23

Andrey
20.07.2018
13:28:23
получил невалидные данные, и не проверил

Google

Антон
20.07.2018
13:28:52
эмм, а в языке, где все есть, кроме HKT, ты пишешь обработчики ошибок, не смотря в код?
В языке-который-нельзя-называть функции, которые завершаются нефатальной ошибкой, возвращают Result, у которого два возможных взаимоисключающих варианта - Ok и Err. Так как этот тип обобщённый, то в варианте Err может быть любой тип, в том числе и тип, суммирующий все ошибки внутрилежащих функций

Andrey
20.07.2018
13:29:40
не в курсе вашего юмора, что это за язык такой?

Илья
20.07.2018
13:29:43
но жить без нее можно :)

Антон
20.07.2018
13:30:04

Алексей
20.07.2018
13:30:08
ну просто можно в питоне перехватить Exception, правда я бы не назвал это прям обработкой

Антон
20.07.2018
13:30:09
Это выживание

Andrey
20.07.2018
13:30:36

Антон
20.07.2018
13:30:40

Илья
20.07.2018
13:30:40
Это выживание
в скольки промышленных языках реализована подобная концепция?

Алексей
20.07.2018
13:31:10
так что всё таки значит

Алексей
20.07.2018
13:31:36

Евгений
20.07.2018
13:33:17
2018 год, люди все ещё спорят по поводу исключений в го.

Denis
20.07.2018
13:33:42

Алексей
20.07.2018
13:34:04
без дженериков то можно худо-бедно прожить

Denis
20.07.2018
13:34:31

Евгений
20.07.2018
13:34:40
Сейчас все сообщество го будет или триггерится или фейспалмить.

Алексей
20.07.2018
13:34:49

Google

Denis
20.07.2018
13:34:59

Алексей
20.07.2018
13:35:14

Andrey
20.07.2018
13:35:17

Алексей
20.07.2018
13:35:41

Andrey
20.07.2018
13:35:51
да не обязательно

Антон
20.07.2018
13:35:53

Алексей
20.07.2018
13:35:57
и за такое по рукам надо бить

Andrey
20.07.2018
13:37:33
функция считает ошибку частью возвращаемых данных, ей не надо исключение вызывать

Admin
ERROR: S client not available

Илья
20.07.2018
13:37:46

Andrey
20.07.2018
13:38:05
что за язык то?

Илья
20.07.2018
13:38:23
ржавчина

Andrey
20.07.2018
13:38:29
о
так и думал

Denis
20.07.2018
13:38:39

Alexander
20.07.2018
13:38:56
руст небось

Andrey
20.07.2018
13:38:56
зобаньте его, он проговррился
и этого

Ivan
20.07.2018
13:39:02
Рустика

Denis
20.07.2018
13:39:18
благодарю

Google

Denis
20.07.2018
13:39:37

Илья
20.07.2018
13:41:22
гошка изначально выигрывала, по моим ощущениям, более понятным синтаксисом, большой стд либой и тулингом из коробки, на чем и выехала

Алексей
20.07.2018
13:44:11

Anton
20.07.2018
13:44:36
в pq нет, в pgx/pgtype вроде бы есть
Я нашел решение как описать запрос в моделе если интересно вот решение
db.Model(&q).Column(«name»).
ColumnExpr("array_agg(id) as id»).Group(«name»).Select()

Илья
20.07.2018
13:45:12
и хайпом гугла
хз, я бы сказал, что поддержка гугла помогала языку набирать стд либу, я влез в го из колбэкхелла в libev, и так и остался

Anton
20.07.2018
13:45:28
сам запрос sql SELECT name, array_agg(id) from my_tables group by name продублировал если кому то лень листать)

Алексей
20.07.2018
13:45:58
Хотя на самом деле я не встречал ничего лучше чем горутины

The
20.07.2018
14:16:32
кто-то юзает в данный момент chromedp + chrome headless?
раньше работал, сейчас что-то перестал

Duamel
20.07.2018
14:21:35


Slava
20.07.2018
14:57:03
всем привет:
у меня есть:
resSl =
v.ParentMs = 'dailystatusms'
v.childMs = 'planningms'
v.listOfCalls = '[API.GetTimesheets API.GetLastIssues API.GetLastIssues API.SpentTime API.SpentTime API.GetOpenPlannings]'
v.ParentMs = 'dailystatusms'
v.childMs = 'projectms'
v.listOfCalls = '[API.GetProjects API.GetColleagues]'
v.ParentMs = 'dailystatusms'
v.childMs = 'trackerifms'
v.listOfCalls = '[API.GetColleagues API.GetTotalReports]'
v.ParentMs = 'planningms'
v.childMs = 'trackerifms'
v.listOfCalls = '[API.GetProjectIssues API.GetIssueByURL]'
v.ParentMs = 'projectms'
v.childMs = 'trackerifms'
v.listOfCalls = '[API.GetProjectsByUser API.GetProjectsByUserTrackers]'
имеем слайс структур в формате выше...
Надо получить дот файл:
digraph G{
ANALYTICSMS->USERMS[label="RequestUserJWT\nUpdateUser\nLoginUser"];
ANALYTICSMS->TRACKERIFMS[label="GetCurrentUser"];
DAILYSTATUSMS->USERMS[label="RequestUserJWT\nUpdateUser\nGetCurrentUser"];
DAILYSTATUSMS->TRACKERIFMS[label="GetCurrentUser"];
DAILYSTATUSMS->PROJECTMS[label="GetProjects\nGetColleagues"];
DAILYSTATUSMS->TRACKERIFMS[label="GetColleagues\nGetTotalReports"];
DAILYSTATUSMS->PLANNINGMS[label="GetTimesheets\nGetLastIssues\nSpentTime\nGetOpenPlannings"];
INVOICEMS->USERMS[label="RequestUserJWT\nRequestUsersJWT\nGetUserInfo"];
INVOICEMS->PROJECTMS[label="GetProjects\nGetUsersProjects"];
INVOICEMS->PLANNINGMS[label="GetUsersPlannings\nGetPlanningsDetails"];
PROJECTMS->TRACKERIFMS[label="GetProjectsByUser\nGetProjectsByUserTrackers"];
SCREENSHOTMS->USERMS[label="RequestUserJWT\nGetUserInfo"];
SCREENSHOTMS->PROJECTMS[label="GetProjects"];
TRACKERIFMS->USERMS[label="RequestUserJWT\nSudoCheckUsersExist"];
USERMS->TRACKERIFMS[label="FindByOAuthCode\nGetUserByOAuth\nGetUserByCredentials\nGetProjectDetails"];
PLANNINGMS->TRACKERIFMS[label="GetProjectIssues\nGetIssueByURL"];
PLANNINGMS->PROJECTMS[label="GetProjects"];
}
кто работал с дот файлами для построения зависимостей, может что подскажет?


Daniel
20.07.2018
14:57:45
вопрос не ясен
генератор дот-файла вы хотите написать? или ищете готовый?

Slava
20.07.2018
14:58:06
надо со слайса структур построит ьдот файцл, потом запустить его и получит ьпдф или пнг картинку
структура type DOTrecord struct{
ParentMs string
childMs string
listOfCalls []string
}
в такмо виде

Daniel
20.07.2018
14:58:47
в чем проблема-то?

Slava
20.07.2018
15:00:51
Я описал что надо сделать
в чём проблдема