Это не сработает: GOARCH=wasm GOOS=js
в основном заставляет компилятор Go генерировать wasm байт-код из источника Go. Чтобы записать это другими словами, код Go компилируетсяк байт-коду WASM и вызовам API WASM вместо машинного кода, специфичного для ЦП, и системных вызовов к конкретному ядру ОС.
С другой стороны, cgo
- это способ ссылка скомпилированный код C с скомпилированным кодом Go.Чтобы скомпилировать программу, использующую cgo
, набор инструментов go
обращается к реальному компилятору C (gcc
большую часть времени), который компилирует части C.
Скомпилированный код C и WASMБайт-коды существуют в разных вселенных и не знают друг о друге.Теоретически, компилятор C, такой как gcc
, мог бы иметь резервную копию WASM - точно так же, как сейчас go
- но IIRC это не тот случай, и бэкэнд WASM Go учат как-то обрабатывать такой случай.
В целом, наиболее типичным случаем использования cgo
является взаимодействие с уже существующей библиотекой, написанной на C (или предоставление C-совместимого API), и большинство таких библиотек обычно делают глубокие предположения относительно среды, в которой они работают.run in - обычно это POSIX-совместимая ОС (с набором системных вызовов для обработки файловых и сокетных операций ввода-вывода и т. д.).
Следовательно, если вы находитесь в редкой ситуации, когда вам нужно связатьс «чистой» библиотекой C, которая выполняет чистую обработку данных и никак не взаимодействует с базовой ОС, возможно, можно взглянуть на транслятор исходного кода C-to-Go.