
Daniel
21.05.2018
09:26:20

Roman
21.05.2018
09:27:45
увы, я на такое натыкался =(

Google

The
21.05.2018
09:30:24

Sergey
21.05.2018
09:31:17
кусаются, наверное
ну или током бьют

Mike
21.05.2018
09:32:15

Nik
21.05.2018
09:34:11
В го есть атомики?

Марина
21.05.2018
09:34:47
#вакансия #go #python #ruby #MachineLearning #ML #офис #fulltime
Всем привет! ?
Кто давно хотел перейти в разработку на Go? ? Сейчас именно тот момент!
Готовы знакомиться с опытными разработчиками, имеющими разный бекграунд (Python/Ruby/Java) и готовых переходить на Go.
О компании: стартап, этап активного формирования команды.
О проекте: разработка платформы, позволяющей автоматически создавать решения на базе машинного обучения для бизнеса.
Основные задачи:
- Создание инфраструктурных решений
- Выстраивание архитектуры приложений
- Разработка и поддержка микросервисов
г. Москва, м. Охотный ряд
ЗП: 150 - 250к на руки
Фултайм в офисе (Возможность иногда работать удаленно).
C подробностями можно ознакомиться здесь:
https://vacancy.newhr.ru/golang/4
С радостью отвечу на все вопросы по почте: marina@new.hr ?
Вакансия представлена агентством https://newhr.ru/
Спасибо!

Roman
21.05.2018
09:34:56

Daniel
21.05.2018
09:39:46
многабукв. что там в двух словах? сброс кеша невовремя?

Roman
21.05.2018
09:40:00
Это как?
процессоры видят память через кеш. использование атомиков приводит к инвалидации кеш-линии конкретного ядра + в дело включаются алгоритмы когерентности кешей(нам надо эту кеш-линию сбросить у соседних ядер на этом же кристалле, а если сокетов больше одного - то еще и в соседний cpu ннадо)

Daniel
21.05.2018
09:40:27
сброс кеша невовремя...

Roman
21.05.2018
09:40:30

The
21.05.2018
09:40:46
альтернатив то нет. или есть?

Roman
21.05.2018
09:40:46
ну и при contention атомики становятся еще более дорогими
для понимания ужаса можно посмотреть на http://htor.inf.ethz.ch/publications/img/atomic-bench.pdf

Google

Daniel
21.05.2018
09:41:34
но вариантов-то нет, кроме как не пользовать шареную память вообще

Roman
21.05.2018
09:42:20
альтернатив то нет. или есть?
нет, да. точнее, атомики плохи при contention. когда несколько потоков используя атомики модифицируют одну и ту же переменную

Mike
21.05.2018
09:42:27

Roman
21.05.2018
09:42:58

The
21.05.2018
09:43:23
@pragus спасибо за статью.

Mike
21.05.2018
09:44:00

Sergey
21.05.2018
09:44:30

Daniel
21.05.2018
09:45:37
и тут мы возвращаемся к вопросу о производительности. запросто на современном проце код с копированием памяти может оказаться быстрее, чем код с передачей указателя и мутексом. если все сойдется так, что копирование произойдет в кеше

Roman
21.05.2018
09:45:54
вообще, самый правильный вариант - писать так, чтобы взаимодействия между горутинами/тредами было минимум.
и не шарить вообще никаких данных

Mike
21.05.2018
09:46:35

Roman
21.05.2018
09:46:59

Daniel
21.05.2018
09:47:17
данные обычно мутировать не надо.

Roman
21.05.2018
09:47:21
если чтения больше чем модификации, оно почти lockless )

Sergey
21.05.2018
09:47:30
и не шарить вообще никаких данных
"не шарить" в смысле не иметь одновременного доступа к одним и тем же данным?
значит нужно передавать данные по каналам?
но каналы же медленные?

Mike
21.05.2018
09:47:33

Daniel
21.05.2018
09:49:25

Mike
21.05.2018
09:49:51

Sergey
21.05.2018
09:50:00

Google

Mike
21.05.2018
09:50:36

Daniel
21.05.2018
09:52:28
конечно. вы и про атомик узнаете только если напишете херню - будете модифицировать счетчик часто и из разных тредов

Roman
21.05.2018
09:54:12

Mike
21.05.2018
09:54:53

Roman
21.05.2018
09:55:09

Mike
21.05.2018
09:55:13
Ага

Сергей
21.05.2018
09:57:07

The
21.05.2018
09:58:56
По поводу тестов, тестировать нужно все ?
Даже простые функции, пусть она просто складывает 2 + 2.
С этим не соглашусь

Mike
21.05.2018
09:59:48
Человек, возможно, из мира динамической типизиции пришел, где тестировать нужно всё, чтобы не огребать от проблем с типами

Jentry
21.05.2018
10:10:25
Тестировать нужно, но не обязательно писать тесты на такие функции, достаточно, чтобы в покрытие попадала другими более высокоуровневыми тестами

The
21.05.2018
10:11:08
ну обычно тестят внешний API и ещё какие-то сложные функции.
я ещё пишу тест перед рефакторингом

The
21.05.2018
10:11:29
если даже функция тривиальная

Jentry
21.05.2018
10:12:39
странно, что перед рефакторингом тривиальные функции, они же как раз могут измениться без изменения внешнего интерфейса

The
21.05.2018
10:13:41
ну если апи тестится ок, и все ожидаемо, то изменив какую-то тривиальную функцию (две, три) можно поломать апи. но потом сложнее вычислить что именно поломало апи.
но я не бог тестов
просто на практике так привык, и мне это кажется удобным

Roman
21.05.2018
10:21:15
Ага
А гошечка у вас работает?

Mike
21.05.2018
10:21:25

tsov
21.05.2018
10:40:38
есть у нас тут кто с ораклом работал на го?

Google

tsov
21.05.2018
10:41:07
не могу понять как для oci8 правильный url к базе составить
mattn/go-oci8

Алексей
21.05.2018
10:41:52
добрый день! подскажите как перекрасить картинку png с зеленого в красный !пописиксельно 255 значений!

stixlink
21.05.2018
10:51:07
Всем привет! Я правильно понимаю, что использовать поинтер на мап это бред, т.к он у нас ссылочный? или это где то применимо?

The
21.05.2018
10:52:39
слайсы, мапы и каналы ссылочные типы
т.е., не нужно делать *map

stixlink
21.05.2018
10:53:08
ок, спасибо)

The
21.05.2018
10:54:15
можете вот это почитать ещё, для справки: https://dave.cheney.net/2017/04/29/there-is-no-pass-by-reference-in-go

Nikita
21.05.2018
10:59:52
а возможно вообще в GoLang объявлять глобальные переменные и вызывать что-то глобально ?
ну к бд подключиться, допустим

Admin
ERROR: S client not available

Artem
21.05.2018
11:01:12
Можно, но не нужно

Nikita
21.05.2018
11:01:26
а как в идеале делать надо ?
я второй день в Go

The
21.05.2018
11:01:51
глобальные - возможно, но доступ через название пакета
доступ к переменным пакета main из других пакетов нет

Nikita
21.05.2018
11:02:10
то есть вынести подключение к бд в отдельный package ?

The
21.05.2018
11:02:18
да, типо того

Nikita
21.05.2018
11:02:40
окс, спасибо

Daniel
21.05.2018
11:12:29
но лучше все же явно передавать хендлер базы куда надо. проще понимать ваш код будет

Nikita
21.05.2018
11:16:12
can't load package: package .: found packages database (database.go) and main (main.go) in /Users/A2/go_test
чо так жестка ):

Google

Sergey
21.05.2018
11:18:22
локальные пути использовать можно, но не нужно, т.к. ничего не будет работать

Denis
21.05.2018
11:18:54

Daniel
21.05.2018
11:18:59

Nikita
21.05.2018
11:21:28
лол
а чо так жестко
ну ладно
а main должен быть в директории отдельной тоже ?
заработало, ура
неа
не заработало

Sergey
21.05.2018
11:23:00

Nikita
21.05.2018
11:23:04
а экспортить как-то надо как в ноде ?

Sergey
21.05.2018
11:23:38

Nikita
21.05.2018
11:25:09
в main ну или в других пакетах
вообще непривычно после ноды

Sergey
21.05.2018
11:26:02
с большой буквы — func Database()

Nikita
21.05.2018
11:27:01
ты лучший

Sergey
21.05.2018
11:27:26
но вообще я не уверен, что Database хорошее название для функции, оно не оторажает никакого действия

some_random_anonymous
21.05.2018
11:27:30
Узнаешь прям ещё больше

Alexander
21.05.2018
11:28:44

Sergey
21.05.2018
11:29:08

Nikita
21.05.2018
11:29:17

Sergey
21.05.2018
11:29:41