
Dmitry
30.03.2018
21:46:55
Спасибо, кэп
Ну такое. К интерфейсу я могу привести произвольный объект, а к структуре - нет.

Daniel
30.03.2018
21:49:35

Roman
30.03.2018
21:50:23

Daniel
30.03.2018
21:50:41
нет

Google

Roman
30.03.2018
21:51:17
а вот, runtime.debug.PrintStack() вроде

yuriy
30.03.2018
22:08:00

Roman
30.03.2018
22:12:56
Рейс детектор есть замечательный
который говорит какая горутина писала туда откуда читала другая, да... но на то чтобы отследить почему это происходит - не всегда одного его хватает

yuriy
30.03.2018
22:27:51
там вроде довольно подробно
previous read тут
previous write тут
https://github.com/cheekybits/genny
кто-то мучал genny под виндой?
у меня какая-то беда с чтением файла
https://i.gyazo.com/7d71ef0c4cf1f0889f01e7362a6a5a30.png

Marlik
31.03.2018
00:44:40
Ошибка в коде имхо...
Попробуйте -in="gen.go" -out="zzz.go"

Dmitriy
31.03.2018
00:53:03
ребятки, ткните пожалуйста носом в либу для демонизации
а то чет я уже загибаюсь(

Marlik
31.03.2018
00:54:51

Dmitriy
31.03.2018
00:55:20
ну есть вот такое вот https://github.com/sevlyar/go-daemon

Google

Dmitriy
31.03.2018
00:55:30
но он чет поверх свой логер накладывает

Marlik
31.03.2018
00:55:35
Не, это я видел...

Dmitriy
31.03.2018
00:57:05
конечно всегда можно запустить nohup, но чет кажется костыль это

Marlik
31.03.2018
00:58:18
По моему это не костыль))))
func main(){
for {
...
}
}
И через системд запускать....

yuriy
31.03.2018
00:58:53

Marlik
31.03.2018
00:59:55

yuriy
31.03.2018
01:00:18
оки, спасимба)

Marlik
31.03.2018
01:03:14
ну есть вот такое вот https://github.com/sevlyar/go-daemon
В принципе в пакете os можно ещё посмотреть, ну там сигналы и всё такое... так-то любой демон это тупо цикл, просто обрабатывать сигналы от ос нуно, и открепиться от ввода, вывода терминалов... про форканье молчу, ибо не знаю как оно в го...

Dmitriy
31.03.2018
01:22:35
как то можно думаю )
буду копать https://github.com/rcrowley/goagain/blob/master/goagain.go#L77

Marlik
31.03.2018
02:43:21

yuriy
31.03.2018
11:09:01
я победил genny под виндой
вообщем, первый нюанс, сначала нужно пускать флаги а потом аргументы к командной строке
я с этим и раньше сталкивался но не понял в чем проблема
то есть genny -in -out gen
а не genny gen -in -out как написано на гите

Roman
31.03.2018
13:29:37
почему мне:
os.MkdirAll(sessFilesPath, 0640)
возвращает:
stat: <path>: no such file or directory

Andrey
31.03.2018
14:03:38
Знающие люди подскажите:
Какой из варианто займёт меньше памяти ? В функцию надо передать массив
Вариант 1 пердаём массив в функции
tmp := dummy([]byte{0x02, 0x01, 0x02, 0x02, 0x01, 0x02}, lbl)
tmp1 := dummy([]byte{0x02, 0x01, 0x02, 0x02, 0x01, 0x02}, lbl)
Вариант 2 передаём переменную
var aa:= []byte{0x02, 0x01, 0x02, 0x02, 0x01, 0x02}
tmp := dummy(aa, lbl)
tmp1 := dummy(aa, lbl)
Вариант 3 передаём указатель на переменную
var aa:= &[]byte{0x02, 0x01, 0x02, 0x02, 0x01, 0x02}
tmp := dummy(aa, lbl)
tmp1 := dummy(aa, lbl)
Что то мне кажется что первый вариант


Roman
31.03.2018
14:12:53
Знающие люди подскажите:
Какой из варианто займёт меньше памяти ? В функцию надо передать массив
Вариант 1 пердаём массив в функции
tmp := dummy([]byte{0x02, 0x01, 0x02, 0x02, 0x01, 0x02}, lbl)
tmp1 := dummy([]byte{0x02, 0x01, 0x02, 0x02, 0x01, 0x02}, lbl)
Вариант 2 передаём переменную
var aa:= []byte{0x02, 0x01, 0x02, 0x02, 0x01, 0x02}
tmp := dummy(aa, lbl)
tmp1 := dummy(aa, lbl)
Вариант 3 передаём указатель на переменную
var aa:= &[]byte{0x02, 0x01, 0x02, 0x02, 0x01, 0x02}
tmp := dummy(aa, lbl)
tmp1 := dummy(aa, lbl)
1. в первом ты создаёшь 2 слайса
2. во втором только один и передаёшь ссылку на него в 2 функции
3. в третьем создаёшь слайс, создаёшь указатель на слайс и его передаёшь копией в 2 функции
самый верный из всех: второй
третий вообще бессмысленен, поскольку сам по себе слайс это не array! слайс это указатель на array (header type)


Andrey
31.03.2018
14:16:36
Просто при преедаче 6 байт их проще было бы передать ка кбайты а не как указатель на байты
но так как тут слайс. У него по мимо данных ещё три пармтера

Google

Andrey
31.03.2018
14:18:33
указатель в современных компьютерах это 8 байт.

Roman
31.03.2018
14:20:16

Andrey
31.03.2018
14:21:25
по 32 можно уже забывать. Эпл и гугль уже вычищают 32 битные приложения

Roman
31.03.2018
14:23:31

Andrey
31.03.2018
14:24:13

Roman
31.03.2018
14:26:43

Andrey
31.03.2018
14:27:50
Да и спросил чтобы не бенчмакить. Но похоже прийдётся :)

Daniel
31.03.2018
14:28:05
придется, конечно
и на разных процах может по-разному оказаться, учтите

Andrey
31.03.2018
14:38:17

Roman
31.03.2018
14:40:40
и на разных процах может по-разному оказаться, учтите
хмм, насколько мне известно - array это тупо C-style array, а слайс это header type с несколькими полями: указатель на массив, int размера и int capacity
т.е. теоретически указатель на массив должен быть легковеснее на любых системах

Roman
31.03.2018
14:42:15
вернее будет называть слайс = "desciptor'ом"

Andrey
31.03.2018
14:44:28
Я думаю что структура

Roman
31.03.2018
14:45:12
ты не копируешь при этом сам array, только эти 3 64/32 битных поля

Andrey
31.03.2018
14:45:44
я это понимаю

Google

Andrey
31.03.2018
14:46:13
тогда с точки зрения экономии памяти мне лучше предавать всё же указатель
на слайс

Roman
31.03.2018
14:46:31
а в первом твоём примере ты создаёшь 2 отдельных слайса, каждый со своим массивом

Admin
ERROR: S client not available

Roman
31.03.2018
14:46:54

Andrey
31.03.2018
14:47:05

Daniel
31.03.2018
14:48:03
коллеги, надо мерять

Andrey
31.03.2018
14:48:16

Daniel
31.03.2018
14:48:17
в гошечке часто указатели медленнее копирования

Roman
31.03.2018
14:49:42
потому что кажды раз в функцию будет копироваться структура. Она по размер будльше чем указатель
копировать 3 integer'а для современной архитектуры это раз плюнуть...
а вот создать лишний указатель значит создать лишнюю нагрузку на Garbage Collector
однако это всё очень не явно, зависит от оптимизаций компилятора, архитектуры и самого процессора, от колва таких операций и и и и и и и....
то чем ты занимаешься называется микрооптимизация, и скорее всего ты тратишь на неё время зря

Daniel
31.03.2018
14:50:04
точно зря
я тут последний раз брался за профайлер месяц назад. с мыслью, что надо будет все оптимизнуть

Roman
31.03.2018
14:51:13
настоящие тормоза в программе всегда выявляются профайлером, и зачастую не связаны с тем, сколько байт ты там скопировал при передаче указателя или слайса

Daniel
31.03.2018
14:51:17
и что же? оказалось, что 90% времени у меня работает json marshaling

Roman
31.03.2018
14:51:28

Daniel
31.03.2018
14:51:53
все, что я смог сделать, это заменить стандартный на easyjson
и все

Andrey
31.03.2018
14:52:31
У меня проблема не с тормозами. А с памятью

Daniel
31.03.2018
14:52:54
тоже меряйте

Google

Andrey
31.03.2018
14:52:56
у меян устройство на мобилке работает

Roman
31.03.2018
14:53:43
У меня проблема не с тормозами. А с памятью
тогда не создавай лишних указателей, если у тебя настолько проблемно с памятью то gc наверное упахивается... и ещё раз: профайлить, профайлить, потом попить кофе и ещё раз профайлить
в Go несколько мне изветно, чем больше указатей, тем сложнее gc
https://youtu.be/-_05_OXYLHA

Andrey
31.03.2018
14:55:00
Похоже мы будем бить прогу на части. Но так в го как длл нет то думаем делать микросервисы. Пытались рефлексию использовать. но она тормозом оказалась.
На мобильнике миросервисы. ?
я сам в шоке

Roman
31.03.2018
14:55:40

Andrey
31.03.2018
14:56:28
а какой ещё есть вариант? Прогв уже 5тыс файлов

Daniel
31.03.2018
14:57:02
а что не так-то с 5К файлов?
или они у вас в одном пакете?

Andrey
31.03.2018
14:57:23
мы уже ту тему с Daniel Podolsy обсуждали

Daniel
31.03.2018
14:57:31
я помню, да

Andrey
31.03.2018
14:57:39
не... они в разных пэкаджах