У них есть функция func C.CString(string) *C.char
которая это делает. Но она новую память выделяет, строку туда копирует и заставляет меня её освобождать. А почему нельзя просто попросить у Go-строки указатель на её байты и её размер и так юзать, если я не собираюсь её изменять?
Я конечно понимаю, что они не дают запомнить указатель на их данные, ибо GC может её переместить. Но я, допустим, не хочу запоминать - а хочу в вызове C-кода один раз на неё посмотреть и всё.
Ведь не прервёт меня Go-шедулер посередине исполнения моего C-кода и не запустит свой Gc, там ведь невытесняющие сопрограммы, которые переключаются только когда наступают всякие краеугольные события в их жизни, а внутри моего С-кода таких событий наступить не может физически.
Update. Ой, всё. На самом деле я хочу []byte пробросить в C++, а это реально тупо через unsafe.Pointer(&arr[0])... Но вопрос про шедулер и прерывание моего C++ кода всё равно интересен.