
stixlink
09.08.2018
07:35:03
Здравствуйте! слайс на 200к записей вида []struct{uint64, int} это норм, чтоб из базы выбирать столько за раз?
или лучше частями?

Daniel
09.08.2018
07:36:20
можно и разом. это же в районе двух мегабайт всего данных

Alexandr
09.08.2018
07:48:41
Коллеги, как правильно сделать нормальные логи в приложении? Если мы будем прокидывать эррор постоянно наверх, то мы при записи получим только само сообщение об ошибке и номер строки, где логгирование случилось, а не гле именно произошла ошибка.

Google

V
09.08.2018
07:49:18
залогировать ошибку перед возвратом?

Alexandr
09.08.2018
07:50:12

V
09.08.2018
07:50:41
чтобы вызывающая функцию логика корректно отработала?

Maxim
09.08.2018
07:50:45

Alexandr
09.08.2018
07:51:33

Maxim
09.08.2018
07:52:01
Мы не экстрасенсы и однозначно утверждать что надо, а что не обязательно писать мы не можем

V
09.08.2018
07:54:27
A вызывает B, B генерирует ошибку errB, логирует и возвращает. A обрабатывает ошибку и, если надо, генерирует ошибку errA, логирует и возвращает. Как-то так?

Аркадий
09.08.2018
07:54:29
парни, а будет ли гонка если две горутины будут читать из одной мапы?

Никита
09.08.2018
07:55:11
Если еще и пишет кто-то в эту мапу

Аркадий
09.08.2018
07:55:55
у меня по дизайну пишет только одна горутина

Alexandr
09.08.2018
07:56:21
Про какую функцию сейчас идёт речь?
Есть исполняемая функция. в ней происходит ошибка. Функция имеет примерно такую сигнатуру:
func myname1 (...) error {...}
Если там срабатывает ошибка, то она получается что прокидывает её наверх в вызывающую функцию (а та, возможно, ещё выше) до того места, пока всё это не попадёт в конечную функцию (например в main) где логируется возврат ошибки самой верхней вызывающей функции. В этом случае, не понятно, откуда именно пришла ошибки, т.к. мы получаем текст ошибки и номер строки ошибки в main.
Однако, если мы будем логировать ошибку в самой функции myname1 где она и происходит, то нафига нам вообще нужно эту ошибку прокидывать наверх? сделаем чтобы она не возвращала ошибку и всё.

Google

Никита
09.08.2018
07:56:23
Если есть запись, тут уже точно надо мьютекс юзать

Alexandr
09.08.2018
07:57:01

V
09.08.2018
07:57:09
нет

Alexandr
09.08.2018
07:57:18
тогда непонял

V
09.08.2018
07:57:26
errA может быть агрегирующей для других вызовов

Nick
09.08.2018
07:57:49
Есть исполняемая функция. в ней происходит ошибка. Функция имеет примерно такую сигнатуру:
func myname1 (...) error {...}
Если там срабатывает ошибка, то она получается что прокидывает её наверх в вызывающую функцию (а та, возможно, ещё выше) до того места, пока всё это не попадёт в конечную функцию (например в main) где логируется возврат ошибки самой верхней вызывающей функции. В этом случае, не понятно, откуда именно пришла ошибки, т.к. мы получаем текст ошибки и номер строки ошибки в main.
Однако, если мы будем логировать ошибку в самой функции myname1 где она и происходит, то нафига нам вообще нужно эту ошибку прокидывать наверх? сделаем чтобы она не возвращала ошибку и всё.
если выкинул ошибку выше, то логировать не надо


Maxim
09.08.2018
07:58:00
Есть исполняемая функция. в ней происходит ошибка. Функция имеет примерно такую сигнатуру:
func myname1 (...) error {...}
Если там срабатывает ошибка, то она получается что прокидывает её наверх в вызывающую функцию (а та, возможно, ещё выше) до того места, пока всё это не попадёт в конечную функцию (например в main) где логируется возврат ошибки самой верхней вызывающей функции. В этом случае, не понятно, откуда именно пришла ошибки, т.к. мы получаем текст ошибки и номер строки ошибки в main.
Однако, если мы будем логировать ошибку в самой функции myname1 где она и происходит, то нафига нам вообще нужно эту ошибку прокидывать наверх? сделаем чтобы она не возвращала ошибку и всё.
Всё зависит от формата логгирования. Можно писать лог в корне, а возвращать оформленную подобающим образом ошибку из недр

Nick
09.08.2018
07:58:00
логируй на уровень выше

Maxim
09.08.2018
07:58:37
Можно писать лог чуть ли не в каждом кейсе if err != nil, тут как удобнее

Daniel
09.08.2018
07:59:21
Есть исполняемая функция. в ней происходит ошибка. Функция имеет примерно такую сигнатуру:
func myname1 (...) error {...}
Если там срабатывает ошибка, то она получается что прокидывает её наверх в вызывающую функцию (а та, возможно, ещё выше) до того места, пока всё это не попадёт в конечную функцию (например в main) где логируется возврат ошибки самой верхней вызывающей функции. В этом случае, не понятно, откуда именно пришла ошибки, т.к. мы получаем текст ошибки и номер строки ошибки в main.
Однако, если мы будем логировать ошибку в самой функции myname1 где она и происходит, то нафига нам вообще нужно эту ошибку прокидывать наверх? сделаем чтобы она не возвращала ошибку и всё.
под такие случаи существуют такие пакеты и функции: https://godoc.org/github.com/powerman/structlog#Logger.Err
и логирует, и возвращает.

Alexander
09.08.2018
07:59:34
@alexsafronov а это библиотека или конечное приложение ?

Alexandr
09.08.2018
07:59:38

Daniel
09.08.2018
08:00:24
на каждом

Alexandr
09.08.2018
08:00:41

Nick
09.08.2018
08:00:46
все зависит от логики,если ошибка не фатальная и дальше не кидается, то логируй
а если она сразу делает return, то лучше логировать еще выше

Alexandr
09.08.2018
08:01:19

Nick
09.08.2018
08:01:43
если ты после ошибки продолжаешь что-то делать в этой функции

Google

V
09.08.2018
08:01:46
если сервис А вызывает сервис В, который вызывает сервис С, где происходит ошибка, то сервис А не очень ожидает увидеть ошибку сервиса С

Alexander
09.08.2018
08:01:51
конечное
я бы логгировал сразу где случилось, а дальше - зависит от логики, если ошибку можно прпоустить и продолжить сценарий дальше, то выше можно игнорировать, если нет, то надо логгировать везде, где пробрасываем наверх

Alexandr
09.08.2018
08:02:43

Daniel
09.08.2018
08:02:44
мой опыт говорит мне, что понять, откуда именно пришли негодные параметры, без логирования на каждом уровне невозможно
а негодные параметры - это примерно 70% всех ошибок

Nick
09.08.2018
08:03:42
негодяи)

James
09.08.2018
08:03:59
Как показывает практика логов много не бывает

Alexandr
09.08.2018
08:04:08

Nick
09.08.2018
08:04:22

Alexandr
09.08.2018
08:04:30

Nick
09.08.2018
08:04:33
а когда у тебя гигабайты логов в секунду?

V
09.08.2018
08:05:02
тогда получится, что сервис А завязан не только на реализацию В, но и на его зависимость в виде С, что не очень хорошо

Alexandr
09.08.2018
08:05:45

V
09.08.2018
08:06:20
окей ?

Nick
09.08.2018
08:06:33

V
09.08.2018
08:06:48
о чем я и говорил выше, спасибо

James
09.08.2018
08:06:55
а когда у тебя гигабайты логов в секунду?
Разумный подход тоже никто не отменял. лично я делаю обычно несколько логов в приложении, если нужно. И отдельно дебажный лог. который включается отдельной настройкой. лучше всего на лету, мониторингом конфига. Вот туда вся помойка и валится.
когда все устаканивается то он обычно не нужен

Alexandr
09.08.2018
08:07:42

Andrew
09.08.2018
08:07:57
#вакансия
Привет, мы в компанию Mad Devs(https://maddevs.io) ищем много гоферов
Требования
- Опыт работы бекенд программистом 5+ лет
- Уметь и любить писать тесты
- Понимание юнит, интеграционных, е2е тестов
- Знание как пользоваться pprof, tracer, как можно оптимизировать код на максимальный перформанс
- Опыт разработки распределенных систем (3+ лет), распределенные системы должны быть в крови
- Уметь CI/CD (Jenkins, TeamCity, GoCD, Concourse…)
- Уметь Docker
- Дружить с конкурентным/асинхронным/параллельным программированием
- Знание SQL на очень хорошем уровне
- Опыт с Postgresql 2+ лет
- Опыт в виртуализации/контейнеризации
- Опыт на С будет огромным плюсом
ЗП: $20-35 в час
Резюме отправлять на rock@maddevs.io

Google

V
09.08.2018
08:08:23
начните с тестов на функцию, прежде чем писать ее реализацию, тогда вы поймете какие ошибки хотите ждать от функции

Alexandr
09.08.2018
08:09:16

V
09.08.2018
08:09:48
поэтому вам и кажутся «гемором» ошибки для конкретной функции

Alexandr
09.08.2018
08:10:23

V
09.08.2018
08:11:49
логируется каждая ошибка, т.к. ошибки разные, то получается что на каждом уровне логируется своя ошибка, чтобы понять для чего разные ошибки на разных уровнях нужно начать писать тесты и разделять зависимости

Alexandr
09.08.2018
08:12:37
Не понял фразу "понять для чего разные ошибки на разных уровнях"

Twelfth
09.08.2018
08:38:13
Здравствуйте. Пытаюсь собрать provisioner для Kubernetes. Версия Go - 1.10. По каким-то причинам provisioner не собирается. Лог компиляции:
https://pastebin.com/JPeFitLS

Admin
ERROR: S client not available

Twelfth
09.08.2018
08:39:54
Сам provisioner: https://github.com/kubernetes-incubator/external-storage/tree/master/local-volume/provisioner
Сборку запускаю через make
Сборка в makefile запускается командой CGO_ENABLED=0 GOOS=linux go build -a -ldflags '-extldflags "-static"' -o local-volume-provisioner ./cmd

Аркадий
09.08.2018
10:50:28
Ребята, могу сюда вбросить свой пет проект? Хотелось бы узнать проблемные места в коде и ошибки архитектуры(если такое имеется)

Илья
09.08.2018
10:57:33

Aleksandr
09.08.2018
11:35:29

Аркадий
09.08.2018
11:51:27
можешь
https://github.com/arkadybag/go-hub - тут описание проекта в кратце
https://github.com/arkadybag/go-phantomjs-node - это масштабируемая нода(из описания у хаба будет понятно)

Никита
09.08.2018
11:53:08
Ребят, кто может подсказать
Есть адрес для апи example.com на порте 80
Если не указывать порт, то нет доступа, если указать, работает
Почему так?

Аркадий
09.08.2018
11:53:46

Никита
09.08.2018
11:53:52

Аркадий
09.08.2018
11:53:58

Google

Никита
09.08.2018
11:54:14
А код тут при чем?

Аркадий
09.08.2018
11:54:29
откуда нам знать, про что ты говоришь

Никита
09.08.2018
11:54:33
У сервера указываю Addr: ':80'
И все

Аркадий
09.08.2018
11:54:39
понятно
И все
2018/08/09 14:56:17 ListenAndServe: listen tcp: address 127.0.0.1: missing port in address
нет там порта поумолчанию, без него откуда функции знать, какой порт у тебя дефолтный?!

Никита
09.08.2018
11:57:59
Я пожалуй подожду ответ человека, разбирающегося в этом вопросе

Аркадий
09.08.2018
11:58:42
тогда сформулируй нормально вопрос
у тебя IP или доменное имя?

Илья
09.08.2018
12:00:03

Никита
09.08.2018
12:01:36
Есть адрес -, допустим example.com
за которым стоит сервак, который крутится на порте 80
Если указывать порт, example.com:80, есть доступ к серверу, если не указывать - нет доступа, не коннектится в принципе

Lesha
09.08.2018
12:01:54

Никита
09.08.2018
12:02:23
Прочитай то что я написал еще раз, если ты плохо понял

Виктор
09.08.2018
12:02:56
как грубо

Никита
09.08.2018
12:02:58
example.com:80 - вот, порт указан

Lesha
09.08.2018
12:03:06

Никита
09.08.2018
12:03:17