Description
this problem happen when I try to create pods on microk8s. gin setMode cannot pass the value from main.go. so, output return panic. I also try on minkube but the result same
How to reproduce
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
gin.SetMode(gin.DebugMode)
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.GET("/dbhost", func(c *gin.Context) {
c.JSON(200, gin.H{
"DB_HOST": "etst",
})
})
r.Run(":8080") // Jalankan server di port 8080
}
Expectations
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.
[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
- using env: export GIN_MODE=release
- using code: gin.SetMode(gin.ReleaseMode)
[GIN-debug] GET /ping --> main.main.func1 (3 handlers)
[GIN-debug] GET /dbhost --> main.main.func2 (3 handlers)
[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.
[GIN-debug] Listening and serving HTTP on :8080
Actual result
panic: gin mode unknown: debug ##debug, release (available mode: debug release test)
goroutine 1 [running]:
github.com/gin-gonic/gin.SetMode(...)
/app/vendor/github.com/gin-gonic/gin/mode.go:74
github.com/gin-gonic/gin.init.0()
/app/vendor/github.com/gin-gonic/gin/mode.go:53 +0x146
exit status 2
Environment
- go version: 1.22.5
- gin version (or commit ref): v1.10.0
- operating system: ubuntu 22.04 on microk8s / minikube
Comment From: RedCrazyGhost
The default is gin.DebugMode, which can be manually specified My side is normal, later I will test this situation in version 1.22.5
package main
import "github.com/gin-gonic/gin"
func main() {
gin.SetMode(gin.DebugMode)
r := gin.Default()
r.GET("/", func(c *gin.Context) {
c.JSON(200,gin.H{"msg":"ok"})
})
r.Run(":9000")
}
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.
[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
- using env: export GIN_MODE=release
- using code: gin.SetMode(gin.ReleaseMode)
[GIN-debug] GET / --> main.main.func1 (3 handlers)
[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.
[GIN-debug] Listening and serving HTTP on :9000
go version go1.21.7 linux/amd64 gin version v1.10.0 os version 20.04.1-Ubuntu
Comment From: RedCrazyGhost
https://github.com/gin-gonic/gin/blob/cc4e11438cd6c0bcc632fe3492d3817dfa21c337/mode.go#L73
https://github.com/gin-gonic/gin/blob/cc4e11438cd6c0bcc632fe3492d3817dfa21c337/mode.go#L52
Your code seems to have been modified again, and you need to check if the source code of the gin has been modified again
Comment From: anggriawanrilda88
hi RedCrazyGhost, thank for reply. in common linux, or windows or docker container, when I try run go gin with my code above, its normal work with no problem, but I try on kubernetes in microk8s and minikube its error happen. I even try enter to the exec on pods and run from there, but still error, I also debug on gin SetMode function for see what happen, and I found param not pass to the function.
Comment From: JimChenWYU
maybe here is wrong, because you set a wrong global variable GIN_MODE