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

Attendez que la fonction se termine dans Golang

WBOY
WBOYavant
2024-02-13 08:15:08730parcourir

在 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()
}

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()
}

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()
}

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()
}

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer