http - 服务器端的代码执行流程(golang)
问题描述
代码是如何在服务器端真正执行的?
myslice是我的实际全局变量,/modify是我修改myslice切片和服务器侦听端口3000和9.134.108.219的 IP 地址的路径,想象一下我的场景用户 1(alice) 和用户 2 (bob) 访问服务器9.134.108.219:3000/modify如果 alice 使用Mutatefunction()比 bob 更早地更改myslice变量会发生什么?,真的会影响 bob 的切片吗?就像打印myslice变量时一样?我真的很困惑代码是如何在服务器端执行的,有人可以简要解释一下吗?
余数:下面是示例代码
package main
import (
"log"
"net/http"
)
var myslice = []int{1,2,3,4}
func main() {
mux := http.NewServeMux()
mux.HanldeFunc("/modify",Mutatefunction)
log.Println("Listening...")
http.ListenAndServe(":3000", mux)
}
func Mutatefunction(){
fmt.Println("mutating")
fmt.Println(myslice) // reading before modifying
myslice = []int{0,0,0}
fmt.Println("completed")
}
解决方案
运行时http.ListenAndServe
,您的程序开始等待。MutateFunction
每个新连接都会创建一个新的 goroutine,如果请求路径正确,它最终会调用。因此,您将MutateFunction
同时运行多个 goroutine。对于您的情况myslice
,它是一个全局变量,它由所有 goroutine 共享。如果要更改该切片,则必须确保使用sync.Mutex
.
推荐阅读
- php - 未知列“email_input”(PHP MySQLi 准备好的语句)
- autohotkey - 如何同时点击两个不同的程序?
- c++ - 当找不到匹配的数据时,如何定义一个函数以返回指向“”值的指针?
- java - 如何在 spring-cloud-stream 中的 kafka 进程拓扑中使用交互式查询?
- javascript - 溢出属性不考虑填充
- java - Getter 方法返回 0 值
- python - 来自文本文件的字典
- wordpress - 当我在帖子区域中单击带有 Js 代码的 Previw 按钮时,找不到页面显示
- c# - WebResponse 不使用传入的 Cookie 进行身份验证
- jquery - TypeScript 和 JQuery:处理程序中的事件“没有”属性“target”和“currentTarget”