gpt4 book ai didi

go - 如何使用 Go Gin 高效调用 localhost Handler?以及如何获取正在运行的url?

转载 作者:数据小太阳 更新时间:2023-10-29 03:08:25 26 4
gpt4 key购买 nike

我遇到一种情况,在 Go Gin 处理程序中,我需要调用另一个处理程序。

我认为编写一个新的 gin.Context 对象很难,所以向 localhost 发出请求可能更容易,尽管这不是必需的,但它会通过路由器。

那么有没有更高效的方法可以直接调用另一个handler?

但是说到如何获取运行的URL呢?当然可以硬编码,因为它是已知的,但是有没有像下面这样的功能?

ts := httptest.NewServer(GetMainEngine())
defer ts.Close()

log.Println(GetJWTMiddleware())
// here ts.URL is the running url in test
req, _ := http.NewRequest("POST", ts.URL + "/u/login", bytes.NewBuffer(loginPostString))

如何只用 gin 获取 ts.URL

最佳答案

调用另一个处理程序的最佳方式是不调用。相反,将通用逻辑抽象为一个新函数,然后调用它。示例:

func handler1(w http.ResponseWriter, r *http.Request) {
path := r.URL.Path()
row := r.URL.Query().Get("rowid")
/* ... do something here with path and row ... */
w.Write(someResponse)
}

func handler2(w http.ResponseWriter, r *http.Request) {
path := "/some/hard-coded/default"
/* ... call handler1 ... */
}

将此更改为:

func handler1(w http.ResponseWriter, r *http.Request) {
path := r.URL.Path()
row := r.URL.Query().Get("rowid")
someResponse, err := common(path, row)
w.Write(someResponse)
}

func handler2(w http.ResponseWriter, r *http.Request) {
path := "/some/hard-coded/default"
row := r.URL.Query().Get("someRowID")
result, err := common(path, row)
w.Write(result)
}

func common(path, row string) (interface{}, error) {
/* ... do something here with path and row ... */
}

作为一般规则,唯一调用您的处理程序函数的应该是您的多路复用器/路由器和您的单元测试。

关于go - 如何使用 Go Gin 高效调用 localhost Handler?以及如何获取正在运行的url?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57002894/

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