代码之家  ›  专栏  ›  技术社区  ›  sibert

在服务器上启动golang

go
  •  1
  • sibert  · 技术社区  · 7 年前

    我在电脑上创建了一个微型围棋程序:

    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。好的,和大多数文件一样。

    如何将Golang部署到服务器并在服务器上启动Golang?上一步有很多文档,但我在服务器端没有找到。

    3 回复  |  直到 7 年前
        1
  •  4
  •   alexandrevilain    7 年前

    我认为您需要使用交叉编译。

    启动时 go build -o hello . 在mac上,它正在为你的mac构建一个二进制文件。

    但要在linux上运行它,需要使用交叉编译: GOOS=linux go build -o hello . . 它将为您的服务器构建二进制文件。

    你可以阅读戴夫·切尼的这篇文章: https://dave.cheney.net/2015/08/22/cross-compilation-with-go-1-5

        2
  •  2
  •   user9406536 user9406536    7 年前

    转到代码所在的文件夹,然后键入terminal GOOS=linux GOARCG=amd64 go build 之后,golang将为您创建文件,将其上载到服务器并键入 chmod +x your_file_name 运行后,使用 ./your_file_name

        3
  •  1
  •   grandchild    7 年前

    Permission denied 通常指向文件上缺少的可执行权限。

    hello二进制文件应该 755 700 在它上面(前者使它对每个人都可执行,后者仅对您的用户可执行)。

    chmod 755 ~/go/hello
    

    或者,或者

    chmod -R +x ~/go
    

    第一个只在服务器可执行文件上设置显式权限位,第二个只在整个目录以及所有包含的文件(和子目录)上添加可执行权限位。(目录通常也有 x -位设置,否则无法列出其内容)