Teilen Sie ein Go-Language-Mining-Pit: Problem mit der Schließung gemeinsamer Variablen

藏色散人
Freigeben: 2021-04-12 11:27:49
nach vorne
2541 Leute haben es durchsucht

Die folgende Tutorial-Kolumne von golang zeigt Ihnen eine Go-Sprache-Falle: Das Problem mit der Schließung gemeinsamer Variablen. Ich hoffe, dass es für Freunde hilfreich sein wird, die es brauchen!

Teilen Sie ein Go-Language-Mining-Pit: Problem mit der Schließung gemeinsamer Variablen

Schauen wir uns ohne weiteres den Code und die Kommentare an:

package mainimport (
    "fmt"
    "time")func main() {
    // 错误示例(打印出的结果是5个6)
    fmt.Println("closure buggy example...")
    for i := 1; i <= 5; i++ {
        // 每个goroutine共享一个变量,goroutine还没开始的时候,i已经变成了6
        go func() {
            fmt.Println(i)
        }()
    }
    time.Sleep(1 * time.Second)


    // 正确示例1:
    fmt.Println("normal example...")
    for i := 1; i <= 5; i++ {
        go func(i int) {   // 使用局部变量
            fmt.Println(i)
        }(i)
    }
    time.Sleep(1 * time.Second)

    // 正确示例2:
    fmt.Println("normal example 2...")
    for i := 1; i <= 5; i++ {
        i := i  // 为每个闭包创建一个变量
        go func() {
            fmt.Println(i)
        }()
    }
    time.Sleep(1 * time.Second)}
Nach dem Login kopieren

Die durch die Ausführung erzielten Ergebnisse sind wie folgt:

closure buggy example...66666normal example...52134normal example 2...52134
Nach dem Login kopieren

Die Gründe und Lösungen finden Sie in den Codekommentaren. Das erste Beispiel ist ein falsches Beispiel und das zweite und dritte Beispiel sind richtige Beispiele.

Das obige ist der detaillierte Inhalt vonTeilen Sie ein Go-Language-Mining-Pit: Problem mit der Schließung gemeinsamer Variablen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:learnku.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage