@proGO

Страница 1532 из 1674
Subbotin
25.06.2018
18:25:48
Вот у тебя есть type A struct { B []int } a = NewA() как сделать вызов какогого-то кода при обращении к a.B?

undiabler
25.06.2018
18:26:24
рефлексия не серебрянная пуля и от всего не спасает, а иногда только оверхед дает здоровый не нужно никаких извращений с неявным выполнением кода, юзайте геттеры и сеттеры и будет счастье

Subbotin
25.06.2018
18:27:35
ну вот orm на кодогенерации мог бы решить проблему

Google
undiabler
25.06.2018
18:29:18
это и есть геттер тогда =)

GetB() или если очень хочется GetParam("B")

Crypt
25.06.2018
18:29:53
Это как посмотреть) ну в целом да, динамический геттер

Subbotin
25.06.2018
18:31:45
Ну это нужна кодогенерация

undiabler
25.06.2018
18:33:03
а все эти неявные выполнения кода, использование unsafe и прочее, за такое нужно бить линеечкой по рукам) потому что код становится не предсказуемым его трудно понимать и отлаживать, не то что внутри команды, а даже просто самому через месяц/два в го как раз другой принцип, что напиши лапшу с кучей if else на каждую возможную ошибку, зато поймет даже школьник и такой код спокойно можно передать коллеге который вьедет и будет поддерживать без лишних плясок с бубном)

ну или покрывать тестами, но я еще не разу не встречал проекта где юзающийся orm покрыли бы тестами на предмет соответствия всем связям и т.д. потому что с кодогенерацией это больно в основном

Daniel
25.06.2018
20:35:53
Часто? Я вот пока ни разу

Pawel
25.06.2018
20:36:38
Часто? Я вот пока ни разу
В жаве постоянно

Roman
25.06.2018
20:48:20
Часто? Я вот пока ни разу
бинарные данные, которые лежат в shared memory )

Daniel
25.06.2018
20:49:22
Зачем они там?!

Roman
25.06.2018
20:50:12
ну или вот в тебя сыпятся ethernet-фреймы и надо понять что вообще это такое: есть ли там dotq, дотянуться до udp-заголовков

Зачем они там?!
интерфейс с ядром такой. можно посмотреть на af_packet из gopacket

Google
Daniel
25.06.2018
20:51:44
Но ансейф не обязателен же

Есть же легитимные методы

Roman
25.06.2018
20:52:04
Но ансейф не обязателен же
а что вместо него?

Daniel
25.06.2018
20:52:55
binary.BigEndian и его родственники

Roman
25.06.2018
20:55:25
Вот смотри https://paste.ubuntu.com/p/WXtFMPMx3K/

у нас есть указатель на буфер где лежат данные + размер этого буфера. мы кастим в (*EtherHdr) и делаем switch по EtherHdr.EtherType

если там 0x8100 (vlan), то кастим в (*EtherVlanHdr)

Daniel
25.06.2018
21:00:20
Я дома гляну

На вскидку - можно парсить же, а не кастить

Ну и кастинг не работает с упакованными структурамт

Roman
25.06.2018
21:03:20
На вскидку - можно парсить же, а не кастить
это аллокации и процессорные такты.

Daniel
25.06.2018
21:06:03
Да, но важно ли это?

Roman
25.06.2018
21:09:05
Да, но важно ли это?
на 10-25гбит - важно

Daniel
25.06.2018
21:09:55
ну, в общем, да, в этом случае важно но ты же пишешь совсем другое

ты пишешь "иногда не обойтись", а этот чат дети читают

так и пиши - "вам похер, но вот на моих pps не обойтись"

Roman
25.06.2018
21:12:07
ты пишешь "иногда не обойтись", а этот чат дети читают
он сказал "не обойтись"? гыгыгыгыгыххх ☺️

Daniel
25.06.2018
21:13:28
он сказал "unsafe это нормально", а я всего лишь отреагировал "руки из под одеяла!"

Google
Roman
25.06.2018
21:31:34
ну и cgo медленный, да =(

Daniel
25.06.2018
21:33:12
cgo я тоже не использую без нужды

последний раз - вместе с zmq, его другого просто нет

Roman
25.06.2018
21:34:52
так и пиши - "вам похер, но вот на моих pps не обойтись"
да даже на меньших скоростях уже проблемы будут, даже на гигабите от cgo больно.

Daniel
25.06.2018
21:35:30
А?!

Вот гигабит я утилизировал на zmq и парсинге без проблем.

Roman
25.06.2018
21:37:54
Вот гигабит я утилизировал на zmq и парсинге без проблем.
смотря что делать ) дело не в полосе, а пакетрейте.

Daniel
25.06.2018
21:38:28
Это да, но ты первый начал

Anton
25.06.2018
22:20:26
Доброй ночи. Есть кто-нибудь знакомый с cgo?

Daniel
25.06.2018
22:20:56
насколько близко?

лучше сразу переходить к вопросам

Anton
25.06.2018
22:23:58
Ок. Выделяю память с помощью "C.alloc" (т.к. нужна неперещаемая переменная). Позже в совершенно другом месте программы при выполнении "обычной" инструкции "return []Control{c.label}" происходит перезапись памяти выделенной с помощью "C.alloc". По крайней мере вроде бы так говорит gdb.

Симптомы - SIGBUS (иногда другие SIGи), т.к. по C.alloc'овскому адресу храниться указатель на callback функцию

Pawel
26.06.2018
04:32:51
последний раз - вместе с zmq, его другого просто нет
zmq я юзал pure гошную, оч ок а cgo нужно для sqlite ещё, тоже неизбежный инструмент в своей области

Pawel
26.06.2018
04:36:14
zeromq/gomq

Daniel
26.06.2018
04:37:20
он был с остальными сервисами не совместим у меня, к сожалению

German
26.06.2018
07:22:30
Всем доброго дня, как красиво обработать данные вида {"foo1": {"foo2":{"foo3":{"data..."}}}}? Нужно достать оттуда data и засунуть это всё в структуру

Google
Виктор
26.06.2018
07:38:42
Тут вроде надо сделать json unmarshal и работать с полученной структурой. Есть встроенный пакет “encoding/json” для этого

Рефлексия совсем не про то. Вот статья о рефлексии, например https://m.habr.com/post/415171/

Pawel
26.06.2018
07:41:34
Всем доброго дня, как красиво обработать данные вида {"foo1": {"foo2":{"foo3":{"data..."}}}}? Нужно достать оттуда data и засунуть это всё в структуру
Использовать github.com/valyala/fastjson data := []byte(` {"foo1": {"foo2":{"foo3":{"data..."}}}}`) fmt.Println(fastjson.GetString(data, "foo1", "foo2", "foo3")) // data

German
26.06.2018
07:43:48
Спасибо, буду разбираться

Александр
26.06.2018
08:17:20
Спасибо, буду разбираться
анмаршал в интерфейс и дальше рекурсией с помощью тайп свичт

Admin
ERROR: S client not available

many-faced
26.06.2018
08:24:56
Всем здравствуйте. Подскажите, пожалуйста, чем будет отличаться работа функций при следующих случаях? func myTest1(done <-chan struct{}) {...} func myTest2(done chan struct{}) {...} Визуально, при go myTest1(done) или go myTest2(done) и затем done <- struct{}{} Работает одинаково

Igor
26.06.2018
08:29:35
Всем здравствуйте. Подскажите, пожалуйста, чем будет отличаться работа функций при следующих случаях? func myTest1(done <-chan struct{}) {...} func myTest2(done chan struct{}) {...} Визуально, при go myTest1(done) или go myTest2(done) и затем done <- struct{}{} Работает одинаково
странно, что у Вас это работает, так как <-chan struct{} говорит, что из канала можно только читать. а Вы пишите в него. а вообще, это только подсказка компилятору, что можно делать с каналом. на работу никак не влияет, только на возможности

Ilya
26.06.2018
08:30:10
<-chan это read only, chan<- это write only

many-faced
26.06.2018
08:31:47
То есть это указывается тип канала. Вот меня и смутило то, что я могу передать в функцию канал, но его тип (read only, write only, rw) я не указываю до функции, то есть он таковым становится внутри.

Igor
26.06.2018
08:33:01
many-faced
26.06.2018
08:33:09
Верно.

Спасибо, ребята, разобрался.

Vyacheslav
26.06.2018
13:32:26
Подскажите плз, нет ли в go какой-нибудь возможности прямо указать какое-либо значение из нескольких возвращаемых? Например сейчас приходится делать так: tmp, _ = json.Marshal(data) json := string(tmp) а хотелось бы так: json := string(json.Marshal(data)) - но тут в string возникает затык, ибо он работает с одним параметром, а пришло два

The
26.06.2018
13:49:32
нету такой возможности

но прям в этом случае, вы можете не через json.Marshal() делать, а черед err := json.NewEncoder(buf).Encode(data), а затем у буффера вызвать buf.String(), хотя это практически одно и то же.

ошибочки нужно проверять

Aleksandr
26.06.2018
14:15:17
добрый вечер народ! подскажите плиз есть ли какая тулза чтобы мержить dep зависимости?

Google
Alexander
26.06.2018
15:13:52
кстати, никто не в курсе на счет badger - что будет когда память закончится? он умрет? или начнет свапать на диск?

Roman
26.06.2018
15:14:27
а кто что использует для кодогенерации взамен дженериков? )

Kirill
26.06.2018
16:23:03
Может кто по очередям подсказать? нужно что бы несколько хэндлеров обрабатывали задачи из редиса. если использовать пабсаб - то как одному хэндлеру дать знать другим - что он принял задачу в работу и больше никому ее не нужно трогать? Или пабсаб тут не подойдет и нужно использовать что то другое?

undiabler
26.06.2018
16:27:40
ну используй одну горутину которая читает пабсаб и записывает все в канал

а остальные горутины уже конкурентно из этого канала вычитывают и работают

Kirill
26.06.2018
16:28:25
хэндлеры это отдельные приложения

The
26.06.2018
16:28:34
BRPOP/BLPOP

только это удаляет задачу из очереди. если что с неё не ок, её нужно опять пушить в список

undiabler
26.06.2018
16:31:12
я пытался такое на nsqd слепить в одном канале приходят задачи, в другом канале хендлеры накидывают заявок на задачи. Поставивший задачу выбирает исполнителя и отписывает ему

в принципе пабсабом можно тоже самое реализовать

Kirill
26.06.2018
16:33:06
Andrey
26.06.2018
16:33:52
https://redis.io/topics/distlock https://redislabs.com/ebook/part-2-core-concepts/chapter-6-application-components-in-redis/6-2-distributed-locking/6-2-5-locks-with-timeouts/

An
26.06.2018
17:15:21
Всем привет! Ищем Go разработчиков! https://hh.ru/vacancy/26390229

Страница 1532 из 1674