Prevent the main() function from terminating before goroutines finish in Golang

前端 未结 4 989
悲哀的现实
悲哀的现实 2020-11-28 15:47

Have loook at this contrived example:

package main

import \"fmt\"

func printElo() {
    fmt.Printf(\"Elo\\n\")
}

func printHello() {
    fmt.Printf(\"Hel         


        
4条回答
  •  悲哀的现实
    2020-11-28 16:12

    If you want just to play with results you can use "hack" with waiting for input:

    package main
    
    import (
        "fmt"
        "bufio"
        "os"
    )
    
    func printElo() {
        fmt.Printf("Elo\n")
    }
    
    func printHello() {
        fmt.Printf("Hello\n")
    }
    
    func main() {
        fmt.Printf("This will print.")
        i := 0
        for i < 10 {
            go printElo()
            go printHello()
            i++
        }
    
        reader := bufio.NewReader(os.Stdin)
        reader.ReadString('\n')
    }
    

    If want to learn how to do synchronization read about sync package:

    package main
    
    import (
        "fmt"
        "sync"
    )
    
    var wg sync.WaitGroup
    
    func printElo() {
        fmt.Printf("Elo\n")
        wg.Done()
    }
    
    func printHello() {
        fmt.Printf("Hello\n")
        wg.Done()
    }
    
    func main() {
    
        fmt.Printf("This will print.")
        i := 0
        for i < 10 {
            wg.Add(2)
            go printElo()
            go printHello()
            i++
        }
    
        wg.Wait()
    }
    

提交回复
热议问题