首页 > 解决方案 > 服务器端的代码执行流程(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")
    }

标签: httpgoserver

解决方案


运行时http.ListenAndServe,您的程序开始等待。MutateFunction每个新连接都会创建一个新的 goroutine,如果请求路径正确,它最终会调用。因此,您将MutateFunction同时运行多个 goroutine。对于您的情况myslice,它是一个全局变量,它由所有 goroutine 共享。如果要更改该切片,则必须确保使用sync.Mutex.


推荐阅读