Краткий ответ: Вид?
Звучит так, как будто вы пытаетесь создать общую библиотеку.
Компилятор Go может создавать общие библиотеки с 1.5 с флагом сборки -buildmode=c-shared
:
go build -o helloworld.so -buildmode=c-shared
И, начиная с Go 1.10 , эта функциональность дополнительно поддерживается в Windows
Итак, компиляция в DLL тоже однострочная:
go build -o helloworld.dll -buildmode=c-shared
Проблема, с которой вы столкнетесь, на самом деле с использованием этих библиотек, особенно в кросс-операционной системе:
В * nix вы можете использовать CGO для этого:
package example
// #cgo LDFLAGS: -lfoo
//
// #include <foo.h>
import "C"
func main() {
C.bar()
}
Windows получает свой собственный Wiki (кто удивлен?).
Я оставлю вам несколько мыслей по этому поводу:
- Там ничего неправильно с бинарным файлом 15-20 Мб (хотя, вы должны попробовать upx , чтобы сбрить часть этого жира, потому что почему бы и нет?), Вы должны быть обеспокоены, когда вы Нажимаем 10-е из 100-х концертов. Пространство дешево в наши дни.
- Запись чего-то, что может быть скомпилировано в один двоичный файл, независимо от ОС, является одним из лучших преимуществ Go.
CGO_ENABLED=0
экономит массу места в ваших двоичных файлах. Включение его (что необходимо для использования этих функций) не оказывает вам никакой пользы.
- Вы правы, предполагая, что, поскольку компилятор не может оптимизировать для включенных библиотек, в конечном итоге вы не сэкономите много, если вообще места, в небольших случаях использования.
Мое последнее замечание, тогда я перестану проповедовать вам: сосредоточьтесь на написании кода. Двоичный размер не должен беспокоить вас, если вы не пытаетесь установить его на встроенные устройства.
Удачи, друг.