@gogolang

Страница 1505 из 1630
Pawel
05.10.2018
09:37:35
я не против, пытаюсь понять можно ли как-то разыменовать автоматически, или надо только побайтно

Pawel
05.10.2018
09:37:47
C.GoBytes(unsafe.Pointer(x.LpData), C.int(x.DwData) ) - не работает

Daniel
05.10.2018
09:38:08
а как вы десериализовать поинтер то собрались?
Я не люблю пустую болтовню, учтите

Google
Daniel
05.10.2018
09:38:08
не, там жсон в строке
Я имею в виду - там только указатель можно паснуть, или что угодно?

Alexander
05.10.2018
09:38:26
так JSON и go слайс вещи разные )) тогда уже разыменовать эту память и скормить декодеру, и структуры не нужны
к тому же, на стеке ты точно не будешь это держать, ибо во время компиляции длинна не известна

John
05.10.2018
09:39:28
только указатель конечно же
это все в рамках одного процесса, верно ?

Pawel
05.10.2018
09:39:55
это все в рамках одного процесса, верно ?
один процес послылает другому процесу синхронно сообщение

John
05.10.2018
09:40:38
один процес послылает другому процесу синхронно сообщение
Правильно ли Я понимаю, что один процесс посылает другому процессу просто указатель на кусок памяти (первого процесса) в сообщении этом ?

Pawel
05.10.2018
09:40:50
именно так

Daniel
05.10.2018
09:40:54
И указатель этот на слайс байтов, так?

John
05.10.2018
09:41:07
именно так
это кусок heap ? оно же не будет работать

Alexander
05.10.2018
09:41:43
Pawel
05.10.2018
09:43:54
И указатель этот на слайс байтов, так?
да. первая программа создаёт массив байтов, формирует сообщение с валидным указателем, и отправляет его синхронно в SendMessage, вторая программа в оконном цикле сообщений его принимает и забирает байты.

Google
Pawel
05.10.2018
09:45:23
тут важно понимать, если у вас и правда процессы ( а не потоки/горутины), то этот метод работь не будет
хватит этого. не надо мне рассказывать что рекомендованный способ обмена между процессами не работает

John
05.10.2018
09:45:36
Почему это?
Потому что у каждого процесса своя виртуальная память, так сказать :) И указатель первого процесса не будет валидным для другого

Алексей
05.10.2018
09:46:18
Потому что у каждого процесса своя виртуальная память, так сказать :) И указатель первого процесса не будет валидным для другого
Ну вообще-то как я понял речь идёт про специальное сообщение WM_COPYDATA, а его название как бы намекает на принцип его действия.

Alexander
05.10.2018
09:46:51
Почему это?
Потому-что в линуксе разделяемая память между процессами есть только при форке, и то там Copy on Write. Ещё можно иметь разделяемую память через файловый дескриптор, но тут похоже другая история.

Алексей
05.10.2018
09:47:13
Pawel
05.10.2018
09:47:23
Alexander
05.10.2018
09:48:43
Daniel
05.10.2018
09:49:09
А оно достаточно умное, чтобы сделать прямое управление и для массива, на который слайс ссылается?

Pawel
05.10.2018
09:50:06
честно говоря я хз. Но в сищных примерах это всё как-то работает

Alexander
05.10.2018
09:50:37
честно говоря я хз. Но в сищных примерах это всё как-то работает
Короче, тебе нельзя это в слайс превращать, а то гошный рантайм попытается собрать мусор, за что его винда покарает.

Алексей
05.10.2018
09:51:42
А оно достаточно умное, чтобы сделать прямое управление и для массива, на который слайс ссылается?
ну нет, слайс же ведь - это особая структура про которую виндовое сообщение ничего не знает

Roman
05.10.2018
09:54:27
b := *(*[]byte)(unsafe.Pointer(&sl))
не будет работать

Алексей
05.10.2018
09:54:32
ещё вроде бы wm_copydata имеет какие-то ограничения на длину сообщения, так что аккуратнее, хотя я могу и ошибаться

John
05.10.2018
09:54:43
не будет работать
Да уже выяснили ... ))

Google
Roman
05.10.2018
09:55:27
пойнтер указывает на блок памяти известного размера, в котором например строка. Вот мне надо эту строку получить
func PtrSliceFrom(p unsafe.Pointer, s int) unsafe.Pointer { return unsafe.Pointer(&reflect.SliceHeader{Data: uintptr(p), Len: s, Cap: s}) }

дальше надо скастить в поинтер на слайс нужного типа.

Alexander
05.10.2018
09:57:28
func PtrSliceFrom(p unsafe.Pointer, s int) unsafe.Pointer { return unsafe.Pointer(&reflect.SliceHeader{Data: uintptr(p), Len: s, Cap: s}) }
и упасть с ошибкой, когда гошный рантайм начнёт собирать мусор

SEGMENTATION FAULT

Alexander
05.10.2018
09:58:10
откуда ошибка?
Данные с другого процесса, read only access

John
05.10.2018
09:58:11
откуда ошибка?
кусок памяти read-only

Roman
05.10.2018
09:58:30
Данные с другого процесса, read only access
так не надо туда писать ничего.

Alexander
05.10.2018
09:58:38
откуда ошибка?
Сделаешь free(ptr) и взрываешься

Alexander
05.10.2018
09:59:05
так не надо туда писать ничего.
Как ты это гошному рантайму объяснишь?

Roman
05.10.2018
09:59:06
Сделаешь free(ptr) и взрываешься
даже после free не взорвется. взрывается только на записи.

Roman
05.10.2018
09:59:24
Как ты это гошному рантайму объяснишь?
рантайм ничего никуда не пишет.

Roman
05.10.2018
10:00:25
это работает
да, потому что это из моего рабочего кода для netmap, где через mmap ядро дает тебе жирный кусок памяти.

Pawel
05.10.2018
10:00:45
супер! большое спасибо

Roman
05.10.2018
10:01:45
Как ты это гошному рантайму объяснишь?
можно с таким же успехом сделать b := *(*[4096]byte)(some_unsafe_pointer)

Alexander
05.10.2018
10:01:56
рантайм ничего никуда не пишет.
ладно, не буду спорить о том, о чём не знаю, венда — тёмный лес

Roman
05.10.2018
10:01:57
и если не выходить за границы, то все будет работать

Google
Kirill
05.10.2018
10:13:53
@madgopher выручай
Ja-ja. Чё там?

Pawel
05.10.2018
10:18:16
@madgopher да уж разобрались благодаря @pragus

у меня есть значение uintptr. Как мне получить из него соответствующий []byte ?

Admin
ERROR: S client not available

Pawel
05.10.2018
10:19:03
Ага)

Kirill
05.10.2018
10:19:19
Вариант неплохой-то

Roman
05.10.2018
10:21:52
Вариант неплохой-то
плохой, потому что надо контролировать длину ручками, ну и оно в компайл-тайме задает лимит.

Pawel
05.10.2018
10:24:27
Через рефлекшн круче

Dk
05.10.2018
11:21:52
Глупый вопрос, наверное. У меня браузер два раза запрос к серверу делает. Как это починить?

Sam
05.10.2018
11:22:46
Он иконку запрашивает наверно

Pavel
05.10.2018
11:23:08
Я вангую, что это префлайт запрос для cors.

Dk
05.10.2018
11:24:19
Ну всё просто. Я сделал хендлер http, сделал вывод пути и метода. В итоге при каждом запросе у меня печатается GET /path GET /path

Aleksandr
05.10.2018
11:24:56
Pavel
05.10.2018
11:25:03
Ну если все просто, то не делай два запроса. Делов то.

many-faced
05.10.2018
11:25:37
Ребята, как в gin-gonic заставить работать binding:"required" ?

Google
Ilya
05.10.2018
11:30:59
а никому случайно не попадался in-memory PostgreSQL?

snip
05.10.2018
11:31:05
Ну всё просто. Я сделал хендлер http, сделал вывод пути и метода. В итоге при каждом запросе у меня печатается GET /path GET /path
Когда то давно такой фокус можно было наблюдать из за imarker, не знаю живы ли они сейчас

Ilya
05.10.2018
11:31:34
типа https://github.com/yandex-qatools/postgresql-embedded но гошный

kino
05.10.2018
11:32:56
вопрос вызов buffio.scanner.Scan() блокирующий?

Aleksandr
05.10.2018
11:33:13
типа https://github.com/yandex-qatools/postgresql-embedded но гошный
in-memory - это когда в оперативной памяти хранит данные. embedded - это когда встраивается куда-то

Ilya
05.10.2018
11:33:42
ну да, это джавная штучка

я для юнит-тестов ищу способ работать с базой

хватало sqlite пока не попался специфически постресовский синтаксис

Mykyta
05.10.2018
11:40:02
Dk
05.10.2018
11:41:08
все просто... ты посмотри developers tools в браузере и покажи нам что за запросы
func main() { http.HandleFunc("/", handlf) log.Fatal(http.ListenAndServe(":8080", nil)) } func handlf(w http.ResponseWriter, r *http.Request) { log.Println(r.Method, r.URL.Path) } всё убрал, оставил это. Кажется, я по глупости воткнул пермамент редирект и браузер теперь редирект делает из кэша диска.



Буду знать, спасибо, @zelenin

Aleksandr
05.10.2018
11:44:51
Редирект из кэша.

Pawel
05.10.2018
11:55:08
Для системы 32 или 64 бит? Для LE или BE?
LE, адрес к счастью 32-х битный в любом случае

Сергей
05.10.2018
12:02:58
я для юнит-тестов ищу способ работать с базой
а почему просто в транзакции не оборачивать?

Ilya
05.10.2018
12:03:49

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