我在计算机上创建了一个很小的Go程序:
package main
import (
"fmt"
"log"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])
}
func main() {
http.HandleFunc("/", handler)
log.Fatal(http.ListenAndServe(":8080", nil))
}
在Mac上使用终端:
$ cd $HOME/go/src/hello
$ ./hello
服务器正在启动。并使用Safari:
http://localhost:8080/hello
我得到“你好,我爱你好!”
到目前为止一切顺利。但我的挑战是将这个二进制文件放在服务器上并运行相同的文件。
在服务器上
Debian 8使用webmin在root Go中创建一个文件夹并将二进制文件放在这个文件夹中
[root@server ~]# cd /go/
[root@server go]# ./hello
sh: 1: ./hello: Permission denied
[root@server go]#
Go文件夹和hello二进制文件的权限是0644. AFAIK,与大多数文件相同。
如何将Golang部署到服务器并在服务器上启动golang?关于上一步的大量文档,但我在服务器端没有找到任何文档。
答案 0 :(得分:4)
我认为您需要使用交叉编译。
当您在Mac上启动go build -o hello .
时,它正在为您构建一个二进制文件Mac。
但是要在linux上运行它,你需要使用交叉编译:{{1}}。它将为您的服务器构建二进制文件。
您可以阅读Dave Cheney的这篇文章:https://dave.cheney.net/2015/08/22/cross-compilation-with-go-1-5
答案 1 :(得分:1)
// while (password_found == 0)
通常指向文件上缺少可执行权限。
hello二进制文件应该有Permission denied
或755
(前者使其可以为所有人执行,后者仅适用于您的用户)。
运行
700
或者
chmod 755 ~/go/hello
第一个只在服务器可执行文件上设置显式权限位,第二个只在整个目录中添加可执行权限位,以及所有包含的文件(和子目录)。 (目录通常也会设置chmod -R +x ~/go
- 位,否则您将无法列出其内容)