Golang Gin 使用新变量重定向和渲染模板

Maj*_*nia 8 go go-gin

我试图在函数的某些进程之后传递一些变量Handler。如何redirect在新页面中将一些 json 变量传递给这个新模板?

// main package
func main() {
    apiRoutes := gin.Default()
    apiRoutes.POST("api/ipg/send", controllers.GatewayIpgSendHandler)
    apiRoutes.GET("ipg/:token", controllers.GatewayIpgRequestHandler)

    // ... rest of the codes
}


// controllers package
func GatewayIpgRequestHandler(context *gin.Context) {
    // some processes that lead to these variables.
    wage := 123
    amount := 13123
    redirectUrl := "www.test.com/callback"


    // What should I do here to pass those
    // three variables above to an existing `custom-view.tmpl` file
    // in my `templates` folder.

}
Run Code Online (Sandbox Code Playgroud)

这是 php(laravel) 相当于我想做的事情。

Moh*_*dam 7

您可以使用 cookie 或查询参数来传递变量。使用 中提供的解决方案之一GatewayIpgRequestHandler

主程序

package main

import (
    "github.com/gin-gonic/gin"
    "temp/controllers"
)

func main() {
    apiRoutes := gin.Default()
    apiRoutes.GET("ipg/:token", controllers.GatewayIpgRequestHandler)
    apiRoutes.GET("api/callback/cookies", controllers.APICallBackWithCookies)
    apiRoutes.GET("api/callback/query_params", controllers.APICallBackWithQueryParams)
    apiRoutes.Run()
}
Run Code Online (Sandbox Code Playgroud)

控制器.go

package controllers

import (
    "github.com/gin-gonic/gin"
    "net/http"
    "net/url"
)

func APICallBackWithCookies(c *gin.Context) {
    wage, err := c.Cookie("wage")
    if err != nil {
        return
    }
    amount, err := c.Cookie("amount")
    if err != nil {
        return
    }
    c.JSON(http.StatusOK, gin.H{"wage": wage, "amount": amount})
}
func APICallBackWithQueryParams(c *gin.Context) {
    wage := c.Query("wage")
    amount := c.Query("amount")
    c.JSON(http.StatusOK, gin.H{"wage": wage, "amount": amount})
}

func GatewayIpgRequestHandler(c *gin.Context) {
    // first solution
    c.SetCookie("wage", "123", 10, "/", c.Request.URL.Hostname(), false, true)
    c.SetCookie("amount", "13123", 10, "/", c.Request.URL.Hostname(), false, true)
    location := url.URL{Path: "/api/callback/cookies",}
    c.Redirect(http.StatusFound, location.RequestURI())

    // second solution
    q := url.Values{}
    q.Set("wage", "123")
    q.Set("amount", "13123")
    location := url.URL{Path: "/api/callback/query_params", RawQuery: q.Encode()}
    c.Redirect(http.StatusFound, location.RequestURI())
}
Run Code Online (Sandbox Code Playgroud)

  • `c.Redirect(http.StatusFound, location.RequestURI())` 就是我所追求的。非常感谢! (3认同)