1. 程式人生 > >/bin/sh: ./main: not found或者go run: no go files listed

/bin/sh: ./main: not found或者go run: no go files listed

出現問題的場景

在本機(Windows系統)上生成一個可執行的二進位制檔案,然後上傳到伺服器上(Linux系統)上執行,就會出現ggo run: no go files listed的問題。 另外一種問題也是相似的場景:在使用Compose構建映象時,COPY的是在Linux(架構是amd64)上生成的可執行檔案,所以在以alpine為基礎映象,不進行其他設定而執行二進位制檔案的時候,就會出現/bin/sh: ./main: not found。 在使用docker-compose.yml檔案來啟動Go服務時,出現上面的錯誤/bin/sh: ./main: not found

出現問題的原因

是由於存在交叉編譯。在宿主機(host)上編譯Go程式,生成可執行的程式碼。而目標機(target)是不同的系統,一些Go相關環境變數不同,所以導致host上編譯得到的可執行程式碼在target上不能執行。

解決方法

生成可執行檔案時,在命令列新增目標機的Go環境資訊,使兩者相同。例如第二種情況可以這樣寫:CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o main