首頁 >後端開發 >Golang >僅在處理程序內有效的變數是什麼意思

僅在處理程序內有效的變數是什麼意思

王林
王林轉載
2024-02-05 21:15:13792瀏覽

僅在處理程序內有效的變數是什麼意思

問題內容

在 go-optical 文件中他們說:

as a rule of thumb, you must only use context values within the
handler, and you must not keep any references

如果我像這樣將上下文當作函數參數傳遞,可以嗎:

func getlist(c *fiber.ctx) error {
   result, err := user.search(c)
}

func search(c *fiber.ctx) (user, err) {
   id := c.params("id")
}

這被認為是一種不好的做法嗎?

我不太明白這句話:

as soon as you return from the handler, any values you have obtained
from the context will be re-used in future requests and will change
below your feet.

那麼,如果我已將回應傳送給客戶端,那麼 params 的值將被重複使用嗎?被誰重用?由我還是根據其他人的要求?

func getlist(c *fiber.ctx) error {
   id := c.params("id") // 911
   return c.sendstring("hello, world!")
}

如果 id 的值為 911,是否表示其他人的請求也會得到 911?

這是什麼意思

will change below your feet

誰能詳細說明一下,讓像我這樣的初學者更容易理解?謝謝...


正確答案


#框架呼叫您的處理程序後可以重複使用實際的上下文對象,因此您在從處理程序返回後不能依賴其狀態。

如果我像這樣將上下文當作函數參數可以嗎?

這很好,只要 Search 不將上下文儲存在其他地方即可。如果它只是使用上下文中的值來進行搜索,然後返回結果,那就沒問題。

那麼,如果我已將回應傳送給客戶端,那麼 params 的值將被重複使用嗎?被誰重用?由我還是根據其他人的要求?

框架將重複使用實際的上下文對象,同時處理稍後的請求。

「腳下會改變」是什麼意思?

如果您不遵循上述建議,而是在從處理程序返回後保留對上下文的引用,則該上下文中的值將意外更改,因為框架正在將該上下文用於新請求。

以上是僅在處理程序內有效的變數是什麼意思的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除