go面试题

144 阅读1分钟

2个函数分别打印dog、fish,要求每个函数都要起一个goroutine,按照dog、fish顺序打印在屏幕上100次。

package main



import (

    "fmt"

    "sync"

)




var waitgroup sync.WaitGroup




// channel 数据交流

func main() {

    dogCH := make(chan struct{}, 1)

    fishCH := make(chan struct{}, 1)

    fishCH <- struct{}{}




    go PrintFish(dogCH, fishCH)

    go PrintDog(fishCH, dogCH)




    waitgroup.Add(2)

    waitgroup.Wait()

}




func PrintDog(catCH, dogCH chan struct{}) {

    defer waitgroup.Done()

    defer close(dogCH)

    for i := 0; i < 100; i++ {

        <-catCH

        fmt.Println("dog ...")

        dogCH <- struct{}{}

    }

}




func PrintFish(dogCH, fishCH chan struct{}) {

    defer waitgroup.Done()

    defer close(fishCH)

    for i := 0; i < 100; i++ {

        <-dogCH

        fmt.Println("fish ...")

        fishCH <- struct{}{}

    }

}