亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

轉到 http 服務器和全局變量

轉到 http 服務器和全局變量

Go
牛魔王的故事 2021-06-11 18:00:05
我有一個http服務器。它是用 Go 編寫的。我有這個代碼:package mainimport (    "net/http"    "runtime")var cur = 0func handler(w http.ResponseWriter, r *http.Request) {    cur = cur + 1;}func main() {    runtime.GOMAXPROCS(runtime.NumCPU())    http.HandleFunc("/", handler)    http.ListenAndServe(":9010", nil)}安全嗎?我可能需要使用互斥鎖嗎?
查看完整描述

2 回答

?
紫衣仙女

TA貢獻1839條經驗 獲得超15個贊

不,這不安全,是的,您需要鎖定某種形式。每個連接都在它自己的 goroutine 中處理。有關詳細信息,請參閱Serve() 實現。


一般模式是使用 goroutine 檢查通道并通過通道接受更改:


var counterInput = make(chan int)


func handler(w http.ResponseWriter, r *http.Request) {

    counterInput <- 1

}


func counter(c <- chan int) {

    cur := 0

    for v := range c {

        cur += v

    }

}


func main() {

    go counter(counterInput)

    // setup http

}


查看完整回答
反對 回復 2021-06-28
?
牧羊人nacy

TA貢獻1862條經驗 獲得超7個贊

除非我忽視的東西,在這種情況下,而不是使用鎖(或頻道),你可以使用的工具發現,在sync/atomic包(雖然你需要讓你的類型無論是int32int64

但是,文檔本身建議您以其他方式。

這些功能需要非常小心才能正確使用。除了特殊的低級應用程序,同步最好使用通道或同步包的工具來完成。通過通信共享內存;不要通過共享內存進行通信。


查看完整回答
反對 回復 2021-06-28
  • 2 回答
  • 0 關注
  • 245 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號