学习go语言有段时间了,都是本地开发调试访问。一直想怎么打包到服务器上,今天终于请教大神们算是搞明白了一些,下面是我的采坑经历。

环境

开发环境:mac
生产环境:virtualbox (虚拟机)下的 CentOS 6.8

virtualbox
服务器环境
本地开发mac环境 go env 参数

历程

go的代码

package main

import (
    "fmt"
    "log"
    "net/http"
)

func sayHello(w http.ResponseWriter, r *http.Request)  {
    fmt.Fprintf(w,"您看到我了")
}

func main() {
    http.HandleFunc("/",sayHello)
    log.Println("启动了")
    err := http.ListenAndServe(":9000",nil)
    if err != nil{
        log.Fatal("List 9000")
    }
}

就这么多,代码意思不赘述。

代码写好了,现在需要编译了,由于是mac环境编译到linux下运行,所有涉及到跨平台编译。

编译代码命令

env GOOS=linux GOARCH=386 go build main.go
uname -aamd64i386
main
直接运行
IP:9000
浏览器图

没错就这么简单,今天是我第一次部署,也是挺惊讶的,不需要任何语言环境,像java程序需要在服务器安装java,php需要安装Apache,PHP等运行环境,go统统不需要,只需要一个linux系统就好,扔上去就可以了。

下面是我当时遇到的坑

1、出现 cannot execute binary file

cannot execute binary file
uname -a

2、运行起来了,但是无法访问

service iptables stop

如果部署真实的线上跑,肯定还需要一些安全,进程守护啥的,本文只是部署入门,就不探讨了。

如果你在部署时遇到什么问题可以留言大家一起探讨。