@gogolang

Страница 1241 из 1630
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

Илья
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
ну ок, значит я вас неправильно понял. Я подумал, что вы предлагаете тупо возвращать тип, который удовлетворяет интерфейсу error
эммм, именно это я предлагаю, точнее так делают в го, и можно сделать хелперы для внешних пользователей // IsTemporary returns true if err is temporary. func IsTemporary(err error) bool { te, ok := err.(temporary) return ok && te.Temporary() }

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
эммм, именно это я предлагаю, точнее так делают в го, и можно сделать хелперы для внешних пользователей // IsTemporary returns true if err is temporary. func IsTemporary(err error) bool { te, ok := err.(temporary) return ok && te.Temporary() }
И чем это хорошо? Всё равно вызывающей стороне switch делать, и опять нигде в коде не записан весь набор ошибок, которые может возвращать функция

Илья
20.07.2018
13:13:16
И чем это хорошо? Всё равно вызывающей стороне switch делать, и опять нигде в коде не записан весь набор ошибок, которые может возвращать функция
это хорошо тем, что пользователь может как знать, какие ошибки ему нужно обработать, так и не знать, ему может быть не важно, и он просто остановит выполнение программы

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

Антон
20.07.2018
13:17:53
в го такого нет, и аналогов паттерн матчинга по аналогии с растом/хаскелем/ерлангом местами и правда не хватает, но жить это не мешает
Ага, не мешает. Кроме того, что в любой момент может прийти ошибка, которую ваш код не знает, как обработать, и программа падает на проде

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

Антон
20.07.2018
13:22:57
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
Проблема в том, что в Go ты в принципе не можешь быть уверен, что обработал все ошибки, не смотря в код
эмм, а в языке, где все есть, кроме HKT, ты пишешь обработчики ошибок, не смотря в код?

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

а если смотреть, то надо прям в весь код смотреть, и в тот, что вызываешь, тоже

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: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:31:10
отсутствие Exception'а не значит, что ошибки нет.
ну в питоне насколько я знаю кодов ошибок нет

так что всё таки значит

Алексей
20.07.2018
13:31:36
А что, даункастить исключение нельзя?
в смысле? мы вообще говорим про обработку всех исключений разом

отсутствие Exception'а не значит, что ошибки нет.
ну только если заигнорить исключение, но тут уж ничего не поможет против такого говнокода

Евгений
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
как выкручиваетесь?
тут только один способ: interface{}

Google
Denis
20.07.2018
13:34:59
Алексей
20.07.2018
13:35:14
костыль же
ну что поделать

Andrey
20.07.2018
13:35:17
так что всё таки значит
много раз видел return result, error в питоне

Алексей
20.07.2018
13:35:41
много раз видел return result, error в питоне
это видимо гошники написали

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

Антон
20.07.2018
13:35:53
в скольки промышленных языках реализована подобная концепция?
Разве что в C++ с std::variant. Но там это не самый распространённый способ обработки ошибок

Алексей
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
Разве что в C++ с std::variant. Но там это не самый распространённый способ обработки ошибок
это я к чему, в языке, который нельзя называть, есть хорошие концепции, и даже либ там уже поболее чем было раньше, но это не повод отказываться от остальных языков

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

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

Andrey
20.07.2018
13:38:29
о

так и думал

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

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
хз, я бы сказал, что поддержка гугла помогала языку набирать стд либу, я влез в го из колбэкхелла в libev, и так и остался
ну по сравнению с коллбэкхеллом что угодно покажется замечательным инструментом

Хотя на самом деле я не встречал ничего лучше чем горутины

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
Я описал что надо сделать

в чём проблдема

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