GO项目部署Linux服务器的实现示例

 更新时间:2024年06月19日 09:27:50   作者:拔剑纵狂歌  
本文主要介绍了GO项目部署Linux服务器的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

最近在学习golang,和前端小伙伴一起写了个H5小游戏,游戏数据采用websocket进行通信。由于是第一次部署go语言项目,在部署过程中遇到很多问题,写下这篇文章进行总结,希望可以帮助到部署遇到问题的朋友。

Golang项目和Java项目部署的不同

Golang项目相比于Java项目部署流程更加的简单,不需要在服务器上下载语言环境,我们可以直接在服务器上运行编译好的二进制文件

go语言能够做到这一点的原因如下:

  • 静态链接:Go 语言的编译器会将程序的所有依赖包括在最终的可执行文件中,这种方式称为静态链接。因此,生成的可执行文件不需要依赖外部的动态链接库或其他运行时环境,可以在没有 Go 语言环境的服务器上直接运行。

  • 跨平台支持:Go 语言的编译器可以生成不同操作系统和架构的可执行文件,比如 Windows、Linux 和 macOS 等。这意味着你可以在开发机器上编译生成 Linux 下运行的可执行文件,然后将其拷贝到 Linux 服务器上直接运行,而无需关心服务器上是否安装了 Go 语言环境。

  • 内置运行时环境:Go 语言的可执行文件中内置了运行时环境,包括垃圾回收、调度器等,因此它们可以独立运行,不需要额外的运行时支持。

对于Java来说,Java 语言在编译时生成的是字节码文件(以 .class 格式存储),而不是直接生成可执行的二进制文件。这些字节码文件需要在 Java 虚拟机(JVM)上执行,因此在服务器上运行 Java 程序仍然需要安装 Java 运行时环境(JRE)或者 Java 开发工具包(JDK)。

 部署流程

1.确保自己的项目在本地可以正常运行和访问;

2.查看自己的项目监听的端口号,本项目监听的是服务器私网IP的8090端口

 3.之后开始我们的编译,设置编译时候的环境变量,依次执行下面命令

D:\SoftwareDevelop\GoFamily\GoWorks\klotski>set CGO_ENABLED=0
D:\SoftwareDevelop\GoFamily\GoWorks\klotski>set GOOS=linux
D:\SoftwareDevelop\GoFamily\GoWorks\klotski>set GOARCH=amd64
D:\SoftwareDevelop\GoFamily\GoWorks\klotski>go build

set CGO_ENABLED=0

  • 这个命令是在 Windows 系统下设置一个环境变量 CGO_ENABLED 的值为 0CGO_ENABLED 是 Go 语言中用来控制是否启用 C 语言的交互能力的环境变量,0 表示禁用了 CGO(Cgo 是一个 Go 包,用于调用 C 代码)。

set GOOS=linux

  • 这个命令是设置一个环境变量 GOOS 的值为 linuxGOOS 是 Go 语言中用来指定目标操作系统的环境变量,这里将目标操作系统设置为 Linux。

set GOARCH=amd64

  • 这个命令是设置一个环境变量 GOARCH 的值为 amd64GOARCH 是 Go 语言中用来指定目标体系结构的环境变量,这里将目标体系结构设置为 AMD64 架构。

go build

  • 这个命令是使用 Go 工具编译当前目录下的 Go 源代码文件,生成一个可执行文件。根据前面设置的环境变量,编译时会将目标操作系统和体系结构设置为 Linux 和 AMD64。

编译完成之后我们得到一个文件名为项目名无文件后缀的文件,我们将这一个文件传输到Linux系统上,在Linux中,我们找到上传的文件目录。

4.通过ls命令查看文件权限是否可执行,如果文件为绿色,代码可直接执行。

如果不可执行,使用chmod 755 ./klotski 更新文件权限

5.通过./文件名或者nohup命令执行文件

#在当前路径下执行文件
./klotski
#通过绝对路径执行文件,只要能够找到文件就可以
/opt/klotski/klotski

#通过上述方式虽然可以执行文件,并且通过公网访问项目,但是我们一旦关闭了当前连接,程序就会终止。通过让当前程序在后台运行的方式,可以解决这一问题
nohup ./klotski

程序运行成功会使服务器界面处于任务的状态,显示访问程序时的输出,如果不是此状态,说明程序运行失败,请检查自己的程序和更改监听的端口IP

6.查询程序运行时占用的端口

# 查询我们的go语言二进制文件是否被执行
# 注意我们程序运行的线程是随机分配的,并不是8090端口,我们的程序仅仅建成8090端口的访问情况
[root@wuqiong klotski]# ps aux | grep klotski 
root     29218  1.4  0.1 1230132 2512 ?        Sl   19:39   0:50 ./klotski
root     32492  0.0  0.0 112812   976 pts/0    S+   20:35   0:00 grep --color=auto klotski

# 关闭运行程序 后面的参数跟PID
kill 29218 

 7.别忘记放开服务器的安全组,开放我们程序监听的端口

到此这篇关于GO项目部署Linux服务器的实现示例的文章就介绍到这了,更多相关GO部署Linux内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • golang使用sort接口实现排序示例

    golang使用sort接口实现排序示例

    这篇文章主要介绍了golang使用sort接口实现排序的方法,简单分析了sort接口的功能并实例演示了基于sort接口的排序实现方法,需要的朋友可以参考下
    2016-07-07
  • Golang使用gorm实现分页功能的示例代码

    Golang使用gorm实现分页功能的示例代码

    在提供列表接口时一般要用到分页,对于存储在某些数据库中的数据进行分页起来非常的方便,下文给出一个通过gorm进行分页并通过http返回数据的例子,感兴趣的小伙帮跟着小编一起来看看吧
    2024-10-10
  • go env环境变量配置的使用

    go env环境变量配置的使用

    在安装和使用Go时,必须要正确地配置环境变量,本文主要介绍了go env环境变量配置的使用,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11
  • golang日志框架之logrus的安装使用教程

    golang日志框架之logrus的安装使用教程

    logrus是一个非常强大的日志框架,具有灵活的功能和易于使用的API,适合处理各种类型的日志需求,这篇文章主要介绍了golang日志框架之logrus的安装使用,需要的朋友可以参考下
    2023-08-08
  • Golang负载均衡和保活设计原理示例探究

    Golang负载均衡和保活设计原理示例探究

    这篇文章主要为大家介绍了Golang负载均衡和保活设计原理示例探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • CMD下执行Go出现中文乱码的解决方法

    CMD下执行Go出现中文乱码的解决方法

    需要在Go写的服务里面调用命令行或者批处理,并根据返回的结果做处理。但是windows下面用cmd返回中文会出现乱码,本文就详细的介绍一下解决方法,感兴趣的可以了解一下
    2021-12-12
  • 聊聊go xorm生成mysql的结构体问题

    聊聊go xorm生成mysql的结构体问题

    这篇文章主要介绍了go xorm生成mysql的结构体问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2022-03-03
  • Go中并发控制的实现方式总结

    Go中并发控制的实现方式总结

    在Go实际开发中,并发安全是老生常谈的事情,在并发下,goroutine之间的存在数据资源等方面的竞争,为了保证数据一致性、防止死锁等问题的出现,在并发中需要使用一些方式来实现并发控制,本文给大家总结了几种实现方式,需要的朋友可以参考下
    2023-12-12
  • vim配置go语言语法高亮问题的解决方法

    vim配置go语言语法高亮问题的解决方法

    vim配置go语言语法高亮的问题已经遇到过好几次了,每次都是找不到答案,今天小编给大家带来了vim配置go语言语法高亮问题的解决方法,感兴趣的朋友一起看看吧
    2018-01-01
  • Windows下在CMD下执行Go出现中文乱码的解决方法

    Windows下在CMD下执行Go出现中文乱码的解决方法

    在cmd下运行go程序或者是GOLAND的Terminal下运行go程序会出现中文乱码的情况。本文就详细的介绍下解决方法,具有一定的参考价值,感兴趣的可以了解一下
    2021-12-12

最新评论