Go: путаница с горутин - PullRequest
0 голосов
/ 17 апреля 2019

Идите эксперты, пожалуйста, кто-нибудь объяснит поведение этого кода. почему он выводит Let's GoGoGo вместо первого значения, присвоенного msg. Я знаю, что это имеет отношение к горутину. Если бы кто-то разбирался в Go, мог бы объяснить мне это конкретно, я был бы признателен. Вот детская площадка .

package main

import (
  "fmt"
  "time"
)

// try to run: go run -race
func main() {
   msg := "Let's Go"
   go func() {
    // Print: "Let's Go"
    fmt.Println(msg)
 }()
  msg = "Let's GoGoGo"
  time.Sleep(1 * time.Second)
}

1 Ответ

1 голос
/ 17 апреля 2019

Самый простой ответ, который я могу дать, состоит в том, что горутин похож на процесс. Когда вы вызываете go func () {...} (), программа сообщает программе «Пожалуйста, запустите этот« процесс »в фоновом режиме, пока я продолжаю выполнять свою программу». Как вы, возможно, знаете, запуск процесса может занять некоторое время. Поэтому, пока он запускается, основная программа продолжает работу, выводя «Let's GoGoGo». Если вы уложитесь спать раньше, чем msg = "Let's GoGoGo", вы, вероятно, (совсем не гарантированно !!) увидите вместо этого напечатанное "Let's Go".

Я бы порекомендовал книгу под названием «Параллелизм в Go», чтобы помочь вам понять, как происходит параллелизм в Go.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...