Maison > développement back-end > Golang > Attendez que la fonction se termine dans Golang

Attendez que la fonction se termine dans Golang

WBOY
Libérer: 2024-02-13 08:15:08
avant
815 Les gens l'ont consulté

在 golang 中等待函数完成

En Golang, attendre qu'une fonction soit terminée est une exigence de programmation courante. Que vous attendiez la fin d'une goroutine ou que vous attendiez l'arrivée des données dans un canal, vous devez utiliser une méthode d'attente appropriée pour la gérer. Dans cet article, nous vous présenterons quelques méthodes et techniques pour attendre l'achèvement des fonctions dans Golang. Que vous soyez un développeur débutant ou expérimenté, cet article vous fournira des conseils utiles et des exemples de code pour vous aider à mieux gérer l'attente des fonctions pour terminer les scénarios. Regardons de plus près!

Contenu de la question

J'ai le code suivant en golang :

func A(){
  go print("hello")
}

func main() {
  A()
  // here I want to wait for the print to happen
  B()
}
Copier après la connexion

Comment s'assurer que b() n'est exécuté qu'après l'impression ?

Solution

Utilisez sync.mutex

var l sync.mutex

func a() {
    go func() {
        print("hello")
        l.unlock()
    }()
}

func b() {
    print("world")
}

func testlock(t *testing.t) {
    l.lock()
    a()
    l.lock()
    // here i want to wait for the print to happen
    b()
    l.unlock()
}
Copier après la connexion

Utilisez sync.waitgroup

var wg sync.waitgroup

func a() {
    go func() {
        print("hello")
        wg.done()
    }()
}

func b() {
    print("world")
}

func testlock(t *testing.t) {
    wg.add(1)
    a()
    wg.wait()
    // here i want to wait for the print to happen
    b()
}
Copier après la connexion

Utilisez chan

func A() chan struct{} {
    c := make(chan struct{})
    go func() {     
        print("hello")
        c <- struct{}{}
    }()
    return c
}

func B() {
    print("world")
}

func TestLock(t *testing.T) {
    c := A()
    // here I want to wait for the print to happen
    <-c
    B()
}
Copier après la connexion

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!

source:stackoverflow.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