Метка: cgo

cgo — это инструмент, позволяющий коду Go взаимодействовать с библиотеками C и нативными API. Он входит в стандартный набор инструментов Go. Разработчики используют cgo, когда чистый Go не дает доступа к нужным низкоуровневым возможностям. Инструмент автоматически генерирует связующий код между Go и C. Функции Go могут напрямую вызывать код C через специальные директивы импорта. Код C также способен вызывать экспортированные функции Go. Работа с памятью и преобразованием типов требует осторожности, потому что Go и C используют разные модели выполнения. cgo часто применяется для работы с системными API, существующими нативными библиотеками и высокопроизводительными компонентами. Эта технология повышает совместимость, но усложняет сборку и добавляет платформенные зависимости.

Понимание cgo важно для системного программирования и межъязыковой интеграции. Инструмент широко используется в сетевых, графических и низкоуровневых проектах.

Передача строки из функции на Go в код на C без выделения памяти (часть 2)

В прошлой статье мы обсуждали возможность передачи строки без выделения памяти. При попытке использовать этот метод в реальных проектах выяснилось, что есть случаи, когда метод неприменим. Все работает отлично, если объект string был сконструирован из статической строковой константы или конкатенацией констант. Если же string представляет собой результат объединения других объектов, при выполнении программы произойдет исключение: mystr :=

Передача строки без выделения памяти из функции на Go в код на C (часть 1)

Документация по CGO весьма скудно освещает вопрос передачи строк. Сказано только одно – используйте функцию C.CString() для преобразования объекта string в понятный коду на C указатель на буфер со строкой, завершенной нулем — char*. Все хорошо, но при этом выделяется блок памяти (malloc), который необходимо удалять вызовом (free), закончив его использование. Несколько расточительно, если функцию