Зависимости языка GO с использованием сборки

Я не думаю, что я единственный, кого это может смутить.

У меня есть очень простая программа Go, единственные зависимости.

import (
    "fmt"
    "time"
   )

Я использовал «go build myprogram.go» и получил бинарный файл, который работает нормально (поскольку у меня установлен GO)

Однако, если у кого-то еще не установлен GO, они, похоже, получают ошибки.

Например:

open c:\go\lib\time\zoneinfo.zip: The system cannot find the path specified.
panic: time: missing Location in call to Time.In

Что мне нужно сделать, чтобы включить сторонние библиотеки в сборку?

Я хотел бы создать двоичный файл, который будет работать на любой платформе, не беспокоясь о зависимостях.


person user3888307    schedule 06.12.2016    source источник
comment
Вам не нужно устанавливать Go для запуска бинарного файла Go. См. документы time.LoadLocation о файле zoneinfo.zip.   -  person JimB    schedule 06.12.2016


Ответы (1)


Без более полного примера вашего кода трудно ответить на конкретную проблему, но я делаю для создания автономных двоичных файлов следующее:

 CGO_ENABLED=0 go build -v -a -ldflags '-s -w' ./...

Который создает статический двоичный файл без зависимостей libc, по крайней мере... Кажется, что зависимость zoneinfo.zip не будет покрыта этим.

Файл zoneinfo.zip не уникален для Go... Go ожидает, что он будет установлен в системе. Вот код, который сканирует системные папки на наличие этого файла: https://golang.org/src/time/zoneinfo_unix.go#L31

На момент написания:

var zoneDirs = []string{
    "/usr/share/zoneinfo/",
    "/usr/share/lib/zoneinfo/",
    "/usr/lib/locale/TZ/",
    runtime.GOROOT() + "/lib/time/zoneinfo.zip",
}
person John Weldon    schedule 06.12.2016