首頁 > 後端開發 > Golang > 主體

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

王林
發布: 2024-02-05 21:15:13
轉載
775 人瀏覽過

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

問題內容

在 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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板