
Ivan
27.12.2016
23:47:49

Roman
27.12.2016
23:49:20
strings.Contains норм
bufio используешь?

Ivan
27.12.2016
23:50:50

Google

Ivan
27.12.2016
23:50:56
И не помню почему уже)

Roman
27.12.2016
23:52:48
reader := bufio.NewScanner(f)
for reader.Scan() {
line := reader.Text()
if strings.Contains(line,"Bla-bla-text") { ...

Ivan
27.12.2016
23:53:20
strings.Contains норм
Есть более менее идея как горутины прикрутить внутри for? Про каналы выше вон говорили, это единственная возможность наверное, чтобы всё в кучу не перемешать.

Roman
27.12.2016
23:53:35
Вот этот код херачит данные с диска со скоростью программ C

Ivan
27.12.2016
23:54:12

Roman
27.12.2016
23:55:38
При использовани strings.Contains у меня упирается в disck I/O и нет смысла в горутинах

Ivan
27.12.2016
23:57:49

Roman
27.12.2016
23:58:35
Потом подключи pprof - посмотришь какая функция выжирает и смотри что моно сделать

Ivan
28.12.2016
00:03:45

Roman
28.12.2016
00:06:35
Ну вот запусти: https://gist.github.com/begetan/1a6dab06082e41da4fe493fb43aaba5e
У гиста имя неправильное, там Go :)

Google

Ivan
28.12.2016
00:15:47
Как количество потоков считается - в цитате.


Roman
28.12.2016
01:38:11
Дело просто в винде :)

Ivan
28.12.2016
04:20:37
Итак. bufio на большом файле показал себя на ~26% лучше чем обработка по строкам из буффера после io/os. На самом деле в ходе тестов было и так видно, что будет примерно такой результат. Почему? Всё просто, bufio читерил) Периодически он себе создавал ещё поток для обработки, что давало +~10% загрузки CPU и естественно эффективность росла.
Уж не знаю, как так можно линейно считывать строки и при этом умудряться заюзать дополнителый поток, но те кто написал bufio видать что-то придумали хитрое.

Alexey
28.12.2016
04:49:17

Ivan
28.12.2016
05:07:07

Alexey
28.12.2016
05:09:57

Ivan
28.12.2016
05:14:00

Petr
28.12.2016
05:39:17
Я почитал про многопоточность в Го но там на примере веб сервера, как бы Го создаёт новый поток для клиента при подключении. А как мне функцию запустить в многопоточности?

Denis
28.12.2016
05:40:22
go myFunc()

Petr
28.12.2016
05:48:53
В отдельном потоке функ запустить а сама дальше пойдёт?

Denis
28.12.2016
06:15:39
дальше планировщик растасует по тредам

Roman
28.12.2016
09:27:33

Артур
28.12.2016
10:28:53
Подскажите, как наиболее правильно сматчить вложенный json в плоскую структуру?
jsonStr := ‘
{
“services”: {
“app”: {
“backends”: [“::1:9051”, “::1:9050”],
“balance”: “source”
},
“db”: {
“backends”: [“::1:5432”, “::1:5433”],
“balance”: “roundrobin”
}
}
}
‘
type Settings struct {
BackendsMap map[string][]string
BalanceTypeMap map[string]string
}

Sergey
28.12.2016
10:58:32
ну можно сматчить на неплоскую структуру, а потом пробежаться и в нужную переложить

Атата
28.12.2016
11:06:02

Google

Артур
28.12.2016
11:46:31

Атата
28.12.2016
11:49:21

Славик
28.12.2016
14:37:58
а чего это в го не работает type switch для структур?
и что нужно сделать со структурой, чтобы заработало?

Daniel
28.12.2016
14:43:53
все работает

Maxim
28.12.2016
14:46:14
Кто работал с вебсокетами гориллы?

Daniel
28.12.2016
14:46:34
иа

corpix
28.12.2016
14:47:40

Max
28.12.2016
14:49:48
Всем привет. Практикующие гоферы, подскажите, Джин (Gin) имеет смысл изучать или он не слишком популярен? А то у меня на нем rest api почти дописан, может чего нибудь более мейнстримное взять?

Vladislav
28.12.2016
14:50:33

Max
28.12.2016
14:50:53

Vladislav
28.12.2016
14:50:54
лучше всего давать ссылку через play.golang.org

Vladislav
28.12.2016
14:51:35
не стоит бросать по середине, это очень плохая практика, которая превращается во вредную привычку

corpix
28.12.2016
14:52:13
Такое только через reflect. Type assertion работает только "на уровне интерфейсов", о чем и говорит компилятор в своей ошибке

Max
28.12.2016
14:52:48

Daniel
28.12.2016
14:53:43

corpix
28.12.2016
14:56:59

Daniel
28.12.2016
14:57:24
ну - сам компилятор тоже выразился плохо

Maxim
28.12.2016
14:57:49
Самое забавное, если я отправляю длиннющщую строку с подстановкой данных через fmt.Sprintf(), то работает.

Google

Daniel
28.12.2016
14:59:43
в пакете websocket есть константы для типов сообщений. пользуйтесь ими

Maxim
28.12.2016
15:03:55

Daniel
28.12.2016
15:05:30
значит, это не валидный id

Maxim
28.12.2016
15:12:10

Daniel
28.12.2016
15:12:41
а в штатном вебсокете что на этом месте?

Admin
ERROR: S client not available

Maxim
28.12.2016
15:14:26

Daniel
28.12.2016
15:16:14
именно
то есть 5 - это не для вас

corpix
28.12.2016
15:20:27
Ещё пожет быть полезно https://tools.ietf.org/html/rfc6455#section-5.5

Maxim
28.12.2016
15:22:04
Зачем в доках тогда прописали что идёт в 5::?

Daniel
28.12.2016
15:23:21
это в каких доках?

Славик
28.12.2016
17:07:20

Denis
28.12.2016
17:09:43
видел когда-нибудь детскую игрушку-коробку с вырезами определенной формы, в которую нужно пихать квадраты, треугольники и тд?
квадратный вырез это интерфейс
сам квадрат - структура
:)

Славик
28.12.2016
17:11:20
видать я не играл в такую =\

Google

Andrey
28.12.2016
17:11:53
тогда вспомни фильм Идиотократия, там большинство людей не понимают интерфейсы

Denis
28.12.2016
17:13:54
интерфес "квадрат" говорит, что структура должна иметь квадратную форму, 4 угла, все стороны равны, ничего другого она не примет
интерфес это соглашение на предоставление некоторой функциональности

Phil
28.12.2016
17:14:59

Denis
28.12.2016
17:16:46
да, все это интерфейсы

corpix
28.12.2016
17:20:34

Alexey
28.12.2016
17:27:10
Тех, кто умеет, можно передать в функцию, которая заставит их ходить

Славик
28.12.2016
17:28:24
о, понятнее
но это понимание не дало понимания, почему switch type не определяет структуру

Vladislav
28.12.2016
17:28:46

Daniel
28.12.2016
17:28:57
Но - именованного типа

Славик
28.12.2016
17:29:31
type SomeStruct struct{...}
?

Daniel
28.12.2016
17:30:22
Да