英文:
Make Gin run on some other port
问题
我在我的main.go文件中有以下内容:
package main
import (
"github.com/gin-gonic/gin"
"github.com/someone/something/backend/config"
)
func main() {
app := config.App()
env := app.Env
gin := gin.Default()
gin.Run(":" + env.PORT)
}
其中PORT是8080
。
当我运行go run main.go
时,它显示Listening and serving HTTP on :8080
。
但是当我运行gin run main.go
时,它显示Listening on port 3000
。
我如何在这里更改端口?我需要在端口3000
上运行其他东西。
更新:gin run main.go --port 8080
仍然记录为Listening on port 3000
。
更新2:gin run --port 8080 main.go
也显示监听端口3000
。
更新3:GIN_MODE=debug PORT=8080 gin run main.go
也不起作用。
英文:
I have this in my main.go file
package main
import (
"github.com/gin-gonic/gin"
"github.com/someone/something/backend/config"
)
func main() {
app := config.App()
env := app.Env
gin := gin.Default()
gin.Run(":" + env.PORT)
}
Where PORT is 8080
.
When I run go run main.go
it says Listening and serving HTTP on :8080
but when I run gin run main.go
it says Listening on port 3000
How can I change port here? to something else. I need to run something else on port 3000
Update: gin run main.go --port 8080
still logs Listening on port 3000
.
Update: 2 gin run --port 8080 main.go
also says listening on port 3000
Update: 3 GIN_MODE=debug PORT=8080 gin run main.go
also doesn't work.
答案1
得分: 2
gin
命令与另一个名为github.com/codegangsta/gin
的代码库相关联。
GIN_MODE
环境变量对gin
命令没有影响,因为它与该命令无关。同时,使用PORT
环境变量来更改其默认端口值也不起作用,因为它依赖于-p
、--port
标志或GIN_PORT
环境变量来更改自身的默认端口值。
如果你想要更改gin
命令的默认端口值,可以使用以下任一选项:
- 使用
--port
或-p
标志,并遵循正确的语法。 - 使用环境变量
GIN_PORT
,将所需的端口作为值进行设置(例如GIN_PORT=8080
)。
当使用-p
或--port
标志时,命令语法是严格的,必须将其放在run
命令之前。
示例:gin -p 8080 run main.go
或 gin --port 8080 run main.go
。
*注意:*你之前尝试使用--port
没有产生任何效果,因为它没有正确地放置在命令的语法中,即在gin
和run
之间。
要使用变量来更改端口:
首先,设置变量,例如export GIN_PORT=8080
,然后运行命令gin run main.go
(你可以使用export GIN_PORT=8080 && gin run main.go
将其合并为一个命令)。
通过环境变量设置端口和通过标志设置端口的区别在于,如果你使用export GIN_PORT=value
设置端口,程序将使用该端口替代程序的默认端口,除非使用-p
或--port
标志显式地与命令一起使用,这将覆盖环境变量。
如果使用标志设置端口,该端口仅在该单个实例中更改。
当然,你可以在任何用于设置变量的文件中设置GIN_PORT
,这样你就不必每次登录时都设置它。
附加信息
在gin
命令的main.go文件中,位于第48-53行的cli.IntFlag
结构初始化如下:
cli.IntFlag{
Name: "port,p",
Value: 3000,
EnvVar: "GIN_PORT",
Usage: "port for the proxy server",
},
该初始化定义了gin
命令的默认端口值,以及可以更改该值的标志和环境变量。Name
字段用于标志的名称,Value
字段用于默认值,EnvVar
字段用于环境变量。
英文:
The gin
command is related to a different repository github.com/codegangsta/gin
.
The GIN_MODE
environment variable has no effect on the gin
command because it is not related with it. Also changing default port value of it with PORT
environment variable won't work, because it relies on -p
,--port
flags or GIN_PORT
environment variable to change the default port value of itself.
If you want to change the default value of port for gin
command you can use either of these options:
Use the --port
or -p
flag following the proper syntax
or;
Using the environment variable GIN_PORT
with the desired port as the value (GIN_PORT=8080
)
When using the -p
or --port
flag, the command syntax is strict and this must be placed before the command run
example: gin -p 8080 run main.go
or gin --port 8080 run main.go
NOTE: Your previous attempts to use --port
did not have any effect because it was not placed properly in the command's syntax, between gin
and run
To change the port using variables:
First, set the variable, such as export GIN_PORT=8080
and then running the command gin run main.go
(you can do this in one command using export GIN_PORT=8080 && gin run main.go
)
The difference between setting the port via environment variable and setting port with flags is that if you set port with export GIN_PORT=value
, the program will use this port in place of the program default unless the -p
or --port
flag is used explicitly with the command, which will override the environment variable.
If you set port with flags, the port will only be changed for that single instance.
Of course you can set GIN_PORT
in any file you use to set variables with, so that you don't have to set this each time you log in.
Additional Information
The cli.IntFlag
struct initialization located on lines 48-53 in the main.go of the gin
command:
cli.IntFlag{
Name: "port,p",
Value: 3000,
EnvVar: "GIN_PORT",
Usage: "port for the proxy server",
},
Defines default port value of the gin
command as well as which flags and which environment variable can change it. Name
field for the flags. Value
field for the default value. EnvVar
field for the environment variable.
答案2
得分: 0
你可以使用环境变量PORT:
PORT=8080 && gin run main.go
英文:
You can use the environment variable PORT:
PORT=8080 && gin run main.go
答案3
得分: 0
resolveAddress()
函数 检查环境变量:
func resolveAddress(addr []string) string {
switch len(addr) {
case 0:
if port := os.Getenv("PORT"); port != "" {
debugPrint("环境变量 PORT=\"%s\"", port)
return ":" + port
}
debugPrint("环境变量 PORT 未定义。默认使用端口 :8080")
return ":8080"
case 1:
return addr[0]
default:
panic("参数过多")
}
}
这意味着,在类似 Linux 的 shell 中,你应该能够执行以下命令:
PORT=8080 gin run
如果你想显示更多日志,可以使用以下命令:
GIN_MODE=debug PORT=8080 gin run
关于你的程序(带有你自己的 main.go
),请检查你的 go.mod
文件中项目的名称,并尝试以下命令:
cd /path/to/my/project
go install
which yourAPP # 应该是 /Users/RohitB/go/bin/yourApp
GIN_MODE=debug PORT=8080 yourAPP
如果你需要 codegangsta/gin
,请使用 gin --version
确认你没有错误地安装了 github.com/gin-gonic/gin
。
英文:
The resolveAddress()
function does check the environment variable:
func resolveAddress(addr []string) string {
switch len(addr) {
case 0:
if port := os.Getenv("PORT"); port != "" {
debugPrint("Environment variable PORT=\"%s\"", port)
return ":" + port
}
debugPrint("Environment variable PORT is undefined. Using port :8080 by default")
return ":8080"
case 1:
return addr[0]
default:
panic("too many parameters")
}
}
That means, in a Linux-like shell, you should be able to do:
PORT=8080 gin run
And you can display more logs with:
GIN_MODE=debug PORT=8080 gin run
Regarding your program (the one with your own main.go
), check the name of your project in your go.mod
, and try:
cd /path/to/my/project
go install
which yourAPP # should be /Users/RohitB/go/bin/yourApp
GIN_MODE=debug PORT=8080 yourAPP
If you need codegangsta/gin
, check with gin --version
that you did not install by mistake github.com/gin-gonic/gin
.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论