поток выполнения кода на стороне сервера (golang) - PullRequest
0 голосов
/ 21 января 2020

как на самом деле выполняется код на стороне сервера?

myslice - моя действительная глобальная переменная, а / modify - мой маршрут для изменения myslice срез и сервер, прослушивающий порт 3000 и ip-адрес 9.134.108.219 и просто представьте мой сценарий user 1 (alice) и пользователь 2 (bob) обращается к серверу в 9.134.108.219: 3000 / одновременно изменяет , что произойдет, если Алиса изменила переменную myslice немного раньше, чем bob, используя Mutatefunction () ?, действительно ли это влияет на срез Боба? например, при печати переменной 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")
    }

1 Ответ

1 голос
/ 21 января 2020

Когда запускается http.ListenAndServe, ваша программа начинает ждать. Каждое новое соединение создает новую процедуру, которая в итоге вызывает MutateFunction, если путь запроса правильный. Таким образом, у вас будет несколько goroutines, запускающих MutateFunction одновременно. Для вашего случая myslice - это глобальная переменная, и она используется всеми программами. Если вы вносите изменения в этот слайс, вы должны убедиться, что вы сериализовали доступ к этому слайсу, используя sync.Mutex.

...