2016-12-06 62 views
0

我不認爲我是唯一可能被這個困惑的人。使用build GO語言依賴關係

我有一個非常簡單的Go程序,唯一的依賴是。

import (
    "fmt" 
    "time" 
    ) 

我用「去打造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 

什麼我需要做的,包括在構建第三方庫?

我想產生一個二進制文件可以在任何平臺上運行,而不用擔心依賴

+0

的[是否有可能使用Go編譯器來分發其它OS中的可執行文件?]可能的複製(http://stackoverflow.com/questions/13967470/is-it-possible-to-use-the-go-compiler-to-distribute-a-executable-file-for-other) –

+1

你不需要去安裝以運行Go二進制文件。查看關於zoneinfo.zip文件的[time.LoadLocation]文檔(https://golang.org/pkg/time/#LoadLocation)文檔。 – JimB

回答

0

沒有你的代碼更充分的例子,這是很難回答的具體問題,但我做什麼,以生成獨立的二進制文件是:

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", 
} 
+0

謝謝你的幫助。 – user3888307