gpt4 book ai didi

go - 如何在路由函数之间传递 var 并在每个 Controller 中更改它?

转载 作者:行者123 更新时间:2023-12-01 22:36:26 26 4
gpt4 key购买 nike

我想在路由之间的每个 Controller 中传递 var 并对其进行全局更改,因此如果 controller1 将 var 更改为“as”,我希望 controller2 使用 var =“as”的新值。我该怎么做?
像这样的东西

main.go:

var test []string

func NewRouter() *gin.Engine {
gin.SetMode(gin.ReleaseMode)
r := gin.New()
r.GET("/ping", gets(test))
r.Run(":6030")
return r
}

Controller .go:
func gets(test) gin.HandlerFunc {
fn := func(c *gin.Context){
// Here I want to change my var (test) and I want to change it globally so if any another function use it I want to use the new value I just change it here
}
}

最佳答案

mkopriva的评论已经给你解决了如何使用mutex .

但是,由于golang推广share memory by communicating ,我建议使用 channel 的另一种解决方案.

package main

import (
"fmt"
"github.com/gin-gonic/gin"
)

func main() {
r := NewRouter()
r.Run(":6030")
}

var test = []string{"abc"}

func NewRouter() *gin.Engine {
gin.SetMode(gin.ReleaseMode)
r := gin.New()

updateChan := make(chan []string, 0)
r.GET("/", gets(updateChan))
r.GET("/mn", er(updateChan))
return r
}

func gets(updateChan chan []string) gin.HandlerFunc {
return func(c *gin.Context){
fmt.Println("before update in get, test=",test)
newTest := []string{"def"}
updateChan <- newTest
}

}

func er(updateChan chan []string) gin.HandlerFunc {
return func(c *gin.Context){
test = <-updateChan
fmt.Println("get a new value for test in er, test=",test)

}

}

使用无缓冲 channel updateChan ,测试将始终使用推送到 updateChan 的最新输入进行更新 channel 。这里不会发生数据竞赛。

当然这只是一个简单的演示,还有很多东西可以用 gin 制作一个完整的 HTTP 服务器。但我将演示的范围限制在 channel仅限使用。

关于go - 如何在路由函数之间传递 var 并在每个 Controller 中更改它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61968405/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com