如何保持Golang服务器持续运行

如何保持Golang服务器持续运行 在代码更改后,如何在终端中保持Go服务器运行,而无需关闭并重新打开终端以使更改生效?

我知道我必须重新编译/重新运行程序(这可以自动化吗?),但我还必须重新打开终端,否则服务器将无法提供服务。

15 回复

谢谢。

更多关于如何保持Golang服务器持续运行的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


谢谢。让我看看是否能安装它……

谢谢,但 Ctrl-C 已经满足了我的需求。

谢谢,但 CTRL-C 已经满足了我的需求。

谢谢。其他人推荐了一个叫‘entr’的工具,但我没能完全搞懂怎么用。

实际上我使用的是 Ubuntu。

我刚刚按了 Ctrl-C,它停止了服务器,并且我无需关闭终端就能重新启动它。

谢谢。

我了解一些方法 1、Go Watch 这种方法用于开发 2、Supervisor Supervisor是一个用Python开发的程序,它可以监控你的程序 3、Jenkins 一个自动部署系统

我使用这个工具来自动重新加载我的Go Web应用程序 https://github.com/codegangsta/gin

我从未遇到过需要重新打开终端的问题。抱歉,在这方面我无法帮助你。

GitHub

acim/go-reflex

Avatar

用于自动重新编译和自动重启 Golang 服务器应用程序的 Docker 镜像 - acim/go-reflex

我使用 ./webserver 启动服务器,然后进行代码更改,接着用 Ctrl-Z 停止服务器,再执行 ‘go build . && ./webserver’,但它没有重启。

因此我关闭并重新打开终端,然后执行 ./webserver,这样它就能工作了。

Ctrl-C 是否比 Ctrl-Z 更好和/或有所不同?

我从未观察到需要关闭终端才能让新编译的程序运行起来……你是如何启动程序的?

对于我大多数(如果不是全部)程序来说,只需按 <kbd>Ctrl</kbd>+<kbd>C</kbd> 终止它们就足够了。

如果情况变得糟糕,我有时需要从第二个终端甚至 SSH 会话中执行 kill -9 命令,但这确实很少见。

你使用的是Windows,而我用的是Linux。我记得在那里,Ctrl-Z 发送的是EOF。

Windows 应该也支持使用 Ctrl-C 来实际终止程序。

PS:如果你使用的是Linux或Mac,那么Ctrl-Z实际上不会停止或终止程序,而是会将程序发送到后台。然后你当然需要将它带回前台,或者终止它或其父进程。

安装

假设您已配置好可用的 Go 环境,并且 GOPATH/bin 已加入您的 PATH 环境变量,那么安装 gin 将非常轻松:

go get github.com/codegangsta/gin

然后,验证 gin 是否已正确安装:

gin -h

我在我的 Go 环境中使用 go.mod。我尝试了上述步骤,但未能成功安装。

这看起来更新更及时,并且有很多*。

GitHub

GitHub

cosmtrek/air

cosmtrek/air

☁️ Go 应用程序的实时重载。通过在 GitHub 上创建帐户来为 cosmtrek/air 的开发做出贡献。

可以使用 airnodemon 这类热重载工具,它们会在代码变更时自动重新编译并运行程序。以 air 为例:

  1. 安装 air:
go install github.com/cosmtrek/air@latest
  1. 在项目根目录创建 .air.toml 配置文件(或使用默认配置)。

  2. 使用 air 启动服务器:

air

当代码文件被修改时,air 会自动检测变化,重新编译并重启服务器,终端会话保持活动状态。示例 Go 服务器代码:

package main

import (
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "当前版本: 2.0")
}

func main() {
    http.HandleFunc("/", handler)
    fmt.Println("服务器运行在 :8080")
    http.ListenAndServe(":8080", nil)
}

修改代码后,air 会输出类似这样的日志并自动重启:

[air] building...
[air] running...

这样服务器就会持续运行并应用最新更改,无需手动重启终端。

回到顶部