gpt4 book ai didi

Go http 服务器和全局变量

转载 作者:IT王子 更新时间:2023-10-29 01:20:04 27 4
gpt4 key购买 nike

我有一个 http 服务器。它是用 Go 编写的。我有这段代码:

package main
import (
"net/http"
"runtime"
)
var cur = 0
func handler(w http.ResponseWriter, r *http.Request) {
cur = cur + 1;
}
func main() {
runtime.GOMAXPROCS(runtime.NumCPU())
http.HandleFunc("/", handler)
http.ListenAndServe(":9010", nil)
}

安全吗?可能我需要使用互斥体?

最佳答案

不,这不安全,是的,您需要某种形式的锁定。每个连接都在其自己的 goroutine 中处理。参见 the Serve() implementation了解详情。

一般模式是使用 goroutine 检查 channel 并接受更改通过 channel :

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
}

相关:Is "net/http"'s use of global variables considered a good practice in golang? .

关于Go http 服务器和全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18923123/

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