@gogolang

Страница 109 из 1630
Slava
05.02.2017
11:48:38
если вам пришли данные, то надо дополнительную структуру делать, если хотите на основе этих данных что-то дальше пропихивать

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

Google
Daniel
05.02.2017
11:49:44
Add надо делать ДО запуска горутины

а то он делается асинхронно, и хер пойми когда

Slach
05.02.2017
11:50:57
блин =((( ну что ж за фигня то такая ну вот я сделал вот так, вызываю Add до spawn ProcessRequest func (g *GA2ClickHouse) SpawnProcessRequest() { log.Print("SpawnProcessRequest BEGIN") g.wg.Add(1) log.Print("g.wg.Add(1)") go g.ProcessRequest() log.Print("SpawnProcessRequest END") } func (g *GA2ClickHouse) ProcessRequest() { log.Print("ProcessRequest BEGIN") defer func() { g.wg.Done() log.Print("ProcessRequest END defer g.wg.Done()") }() //... тут всякое } // over engineering detected ;) func (g *GA2ClickHouse) ShutdownCollector() { log.Println("ShutdownCollector BEGIN") close(g.buffered_data) g.wg.Wait() if g.tsv_file != nil && g.tsv_file.Fd() < math.MaxUint32 && g.writed_rows > 0 { g.pushDataToProcessDir() } if err:=g.geoip.Close(); err != nil { LogErrorAndExit(err) } log.Println("ShutdownCollector END") } =(( и блин даже дебагером не подцепиться =( оно вообще стало виснуть на g.wg.Wait() в логах выглядит вообще вот так 2017/02/05 15:43:54 SpawnProcessRequest BEGIN 2017/02/05 15:43:54 g.wg.Add(1) 2017/02/05 15:43:54 SpawnProcessRequest END 2017/02/05 15:43:54 b.N=1 2017/02/05 15:43:54 ShutdownCollector BEGIN 2017/02/05 15:43:54 ProcessRequest BEGIN 2017/02/05 15:43:54 ProcessRequest END after channel closed 2017/02/05 15:43:54 ProcessRequest END defer g.wg.Done()

race condition ушли но и работать перестало =(

Ivan
05.02.2017
12:52:46
А посоветуйте, если кто какими линтерами пользуется для go кода? Развито ли это всякое?

Daniel
05.02.2017
12:54:02
что значит - виснуть?

Slach
05.02.2017
12:55:01
ну значит останавливаться и ничего не делать выглядит по логам так будто ShuwdownCollector застыл на g.wg.Wait() и ждет сцуко ;( но я точно знаю что я wg.Add(1) сделал только в одном месте... чего ему там еще ждать то

Daniel
05.02.2017
12:55:20
вы, коллега, длаете ли где-нибудь Done()

Slach
05.02.2017
12:56:13
2017/02/05 15:43:54 ProcessRequest END after channel closed 2017/02/05 15:43:54 ProcessRequest END defer g.wg.Done() да делаю и оно в логах показывает что делаю сразу после отрабатывания закрытия канала

Daniel
05.02.2017
12:57:47
правильный паттерн вот такой: wg.Add(1) go func() { funcToBeRun() wg.Done() }()

Google
Ivan
05.02.2017
13:02:34
https://github.com/alecthomas/gometalinter
О спасибо, прямо сходу 10 мест нашел

Slach
05.02.2017
13:06:13
почему я не могу внутри funcToBeRun() сделать defer wg.Done() ???? почему это не правильно?

ок... сейчас попробую

я понял спасибо

Daniel
05.02.2017
13:06:32
можешь

Slach
05.02.2017
13:06:42
так просто нагляднее

Daniel
05.02.2017
13:06:54
просто мой способ идеоматический

ага

Slach
05.02.2017
13:19:06
нет не помогло... все равно ерунда какая то что именно ждет wait вообще не ясно 2017/02/05 16:17:11 SpawnProcessRequest BEGIN 2017/02/05 16:17:11 g.wg.Add(1) 2017/02/05 16:17:11 SpawnProcessRequest END 2017/02/05 16:17:11 b.N=1 2017/02/05 16:17:11 ProcessRequest BEGIN 2017/02/05 16:17:11 ShutdownCollector g.wg.Wait() BEGIN 2017/02/05 16:17:11 ProcessRequest END after channel closed 2017/02/05 16:17:11 SpawnProcessRequest END g.wg.Done()

Slava
05.02.2017
13:19:45
выложи куда-то код, иначе мы никогда не угадаем

Slach
05.02.2017
13:21:10
https://bitbucket.org/bloodjazman/ga2clickhouse/src/907c5b377accef93314e6cbd1882279e1091114a/?at=feature%2Fgo-collector

Slava
05.02.2017
13:21:34
а можно поточнее?

Slach
05.02.2017
13:23:34
вот бенчмарк который "подвисает" https://bitbucket.org/bloodjazman/ga2clickhouse/src/907c5b377accef93314e6cbd1882279e1091114a/src/ga2clickhouse/handlers_web_test.go?at=feature%2Fgo-collector&fileviewer=file-view-default#handlers_web_test.go-41 вот вызов wg.Wait() https://bitbucket.org/bloodjazman/ga2clickhouse/src/907c5b377accef93314e6cbd1882279e1091114a/src/ga2clickhouse/cli.go?at=feature%2Fgo-collector&fileviewer=file-view-default#cli.go-182 вот вызов wg.Add() и порождение функции читающей канал через select а также делающий wg.Done() по завершению https://bitbucket.org/bloodjazman/ga2clickhouse/src/907c5b377accef93314e6cbd1882279e1091114a/src/ga2clickhouse/data_processor.go?at=feature%2Fgo-collector&fileviewer=file-view-default#data_processor.go-14 канал буфферизованый

Peter
05.02.2017
13:24:11
https://github.com/davelondon/jennifer/

Slach
05.02.2017
14:16:49
а то что в sync.Waitgroup нет возможности прочитать counter это типа специально так задумано??

Daniel
05.02.2017
14:16:59
ага

но можно сочинить свой вэйтгруп на атомиках, и в нем сделать что пожелаешь

Slach
05.02.2017
14:25:28
=(( да блин, как то хочется чтобы простые то вещи из коробки работали а тут мистика какая то... сделано все "по мануалу" (код с defer в котором wg.Done он в examples в официальной доке лежит) а оно не работает при этом суко... буквально с утра таже самая конструкция работала (не работало другое)

Daniel
05.02.2017
14:29:54
нет там мистика

Slach
05.02.2017
14:33:51
а что тогда есть?? через дебагер не подступишься логи говорят что .Done() вызван и что Add вызван 1 раз и вызван ДО Wait закоментарил вообще этот wg.Wait и бенчмарки заработали это как вообще ? ;((

Google
Daniel
05.02.2017
14:34:11
коллега

вы написали херовый код

вот и вся мистика

Ivan
05.02.2017
18:46:43
https://github.com/davelondon/jennifer/
Зачем такое ? Есть реальный кейс ?

Peter
05.02.2017
19:35:58
Ivan
05.02.2017
19:37:04
Я не смог придумать зачем.

Sander
05.02.2017
20:06:02
Всем привет, кто что думает, есть ли смысл читать эту книгу разработчику среднего уровня? https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882

Slach
06.02.2017
06:01:44
Скажите я правильно понимаю что go func() {} исполняет горутину не сразу в момент вызова, а помещает горутину в FIFO очередь, а дальше если есть свободный Machine (максимум которых указан GOMAXPROCS), то запускает паралельно в момент порождения горутины? или все таки запуск накопленных горутин и переключение очереди осуществляется при syscall или при работе с каналами?

Mars
06.02.2017
06:02:36
Горутины запускает планировщик, там не FIFO.

Нет гарантии что последовательно объявленные вызову горутин будут так же последовательно вызваны

Slach
06.02.2017
06:04:28
ок. вызваны они будут сразу если есть свободное ядро?

Daniel
06.02.2017
06:50:33
Когда-нибудь

Антон
06.02.2017
07:14:58
добрый день! подскажите, возможно ли, и если да, то как, создать тип вроде type Points []Point и потом, создав переменную такого типа, иметь возможность заполнять этот массив через индексы, то есть: var test Points test[0] = ...

Daniel
06.02.2017
07:16:40
Да

А чего не попробовали-то?

Михаил
06.02.2017
07:17:15
ну тут же 344 человека, кто-нибудь да ответил бы, видимо

Антон
06.02.2017
07:17:37
я попробовал

Daniel
06.02.2017
07:17:44
И?

Антон
06.02.2017
07:17:45
получаю ошибку index out of range

или как-то так

Google
Daniel
06.02.2017
07:17:50
А

Zver
06.02.2017
07:18:21
Используй append

Daniel
06.02.2017
07:18:29
То есть - принципиален отказ от append и make?

Zver
06.02.2017
07:18:39
Либо сразу алоцируй все место.

Slach
06.02.2017
07:18:47
=) append или make сделать надо сначала http://golang-book.ru/chapter-06-arrays-slices-maps.html https://github.com/golang/go/wiki/SliceTricks

Daniel
06.02.2017
07:19:02
Тогда - надо map использовать

Zver
06.02.2017
07:19:35
Но Мар будет заметно медленней.

Admin
ERROR: S client not available

Slach
06.02.2017
07:20:05
ээээ... вам шашечки или ехать =) оно заметно медленее будет наверное на сотнях тысяч элементов =)

Daniel
06.02.2017
07:20:09
Топикстартер не говорил, что надо быстро

Антон
06.02.2017
07:22:21
у меня как раз сотни тысяч элементов =(

Zver
06.02.2017
07:23:05
Ну тогда выделяйте мейком место и оперируйте точками. Никаких проблем в этом нет.

Как-то тестировал append, работает достаточно быстро. Почти как предварительное выделение и запись по индексу.

Антон
06.02.2017
07:26:16
Ну тогда выделяйте мейком место и оперируйте точками. Никаких проблем в этом нет.
к сожалению, это мне не подходит у меня все сильно завязано на там, какой длины массив, а при make и изначально будет указанной длины

Slach
06.02.2017
07:27:09
а про append ты читал?

Daniel
06.02.2017
07:27:22
append расширит массив, если надо

Zver
06.02.2017
07:27:25
к сожалению, это мне не подходит у меня все сильно завязано на там, какой длины массив, а при make и изначально будет указанной длины
Ничего не понял, что написали. Если не известен заранее размер, то используйте append и все.

к сожалению, это мне не подходит у меня все сильно завязано на там, какой длины массив, а при make и изначально будет указанной длины
Мейком можно указать и нулевой размер, но сразу выделить память под предполагаемое количество элементов.

Антон
06.02.2017
07:31:11
хмм...понял, спасибо, попробую)

Google
Антон
06.02.2017
07:43:59
вроде разобрался) всем большое спасибо за помощь!

Михаил
06.02.2017
08:31:53
а кто-нибудь в курсе, как в regexp'ах голанга делать атомарные группировки? (?> ) не поддерживается вроде.

Daniel
06.02.2017
08:38:44
эээ

Daniel
06.02.2017
08:50:31
нет

имеется в виду спец-конструкция, которая влияет на глубину отката стека парсера

никогда в жизни ей не пользовался - потому и не знаю, как оно в го

Михаил
06.02.2017
08:53:19
Да вот мне вот понадобилось второй раз в жизни

Daniel
06.02.2017
08:58:21
можно в слаке попробовать спросить

и следующим ходом - в англоязычном листе

?
06.02.2017
09:28:35
имея бинарник проги на го, можно понять, что она написано на го и можно ли ее декомпилить в хоть сколько-то адекватный код? (сорри, если вопрос тупой)

собстно, хочу знать, могу ли дать кому-то бинарник, чтобы у него не было сорцов?

Valery
06.02.2017
09:30:24
Пока что нет декомпиляторов

Daniel
06.02.2017
09:30:31
декомпилится оно в go assembler

Valery
06.02.2017
09:30:38
Ну ладно(

Constantine
06.02.2017
09:30:50
Валера-Валера )

Valery
06.02.2017
09:31:06
Ну все равно это такое

Daniel
06.02.2017
09:31:09
собственно, декомпиляторов я не видал, но создание декомпилятора для го - очень простое дело

?
06.02.2017
09:31:09
а надо знать, что она в принципе на го написана или это можно прочекать?

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