Maison > développement back-end > Golang > Partagez une fosse d'extraction de langues : problème de variable partagée de fermeture

Partagez une fosse d'extraction de langues : problème de variable partagée de fermeture

藏色散人
Libérer: 2021-04-12 11:27:49
avant
2579 Les gens l'ont consulté

Ce qui suit est un piège du langage go partagé par la colonne du didacticiel golang : problème de variable partagée de fermeture. J'espère que cela sera utile aux amis qui en ont besoin !

Partagez une fosse d'extraction de langues : problème de variable partagée de fermeture

Pas grand chose à dire, regardez le code et commentez directement :

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)}
Copier après la connexion
Les résultats obtenus en courant sont les suivants :

closure buggy example...66666normal example...52134normal example 2...52134
Copier après la connexion
Les raisons et solutions voir l'annotation du code . Le premier exemple est un exemple incorrect, et les deuxième et troisième exemples sont des exemples corrects.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:learnku.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal