如何修改gin run命令启动的Gin应用监听端口?
解决gin run启动端口固定3000的问题
你碰到的是Gin热重载工具(github.com/codegangsta/gin)的特性问题:gin run本质是启动了一个代理服务器(默认监听3000),再把请求转发给你的实际应用进程,控制台显示的Listening on port 3000是这个代理的端口,不是你代码里配置的应用端口。
给你三个可行的解决方法:
方法一:直接修改代理服务器的端口
用GIN_PORT环境变量指定代理监听的端口:
GIN_PORT=8080 gin run main.go
或者用工具自带的--port(旧版本可能要用短参数-p)参数:
gin run --port 8080 main.go # 旧版本尝试: gin run -p 8080 main.go
方法二:让代理直接转发到你的应用8080端口
因为你的代码固定监听8080,需要同时告诉gin工具应用的端口和代理的端口:
gin run --port 8080 --appPort 8080 main.go
这样gin的代理会监听8080,直接把请求转发到你应用的8080端口。
方法三:修改代码适配gin的端口传递
gin启动应用时会自动给应用设置PORT环境变量,你可以让代码优先读取这个变量,既保留自己的默认端口配置,又适配gin的热重载机制:
package main import ( "github.com/gin-gonic/gin" "github.com/someone/something/backend/config" "os" ) func main() { app := config.App() env := app.Env // 优先用gin设置的PORT,没有则用配置文件里的PORT port := os.Getenv("PORT") if port == "" { port = env.PORT } r := gin.Default() r.Run(":" + port) }
修改后用gin run --port 8080 main.go启动,此时gin代理会监听8080,转发到它分配的应用端口,你只需访问8080即可。
内容的提问来源于stack exchange,提问作者Alwaysblue
相关产品推荐
相关产品推荐

