go面试题:goroutine、chan、生产者、消费者

点击个人博客,查看更多文章https://elonjelinek.github.io/

主goroutine中从键盘读取一个英文字符串,并逐个将每个字符串写入到一个通道中,另外创建两个子goroutine进行读取,并打印输出结果。同时使用waitgroup保证主goroutine在子goroutine执行结束后再结束。

package main

import (
    "fmt"
    "sync"
)

var wg sync.WaitGroup

func main() {
    var line string
    fmt.Scanln(&line)
    ch := make(chan string, 1000)
    wg.Add(2)
    for _, value := range line {
        ch <- string(value)
    }
    close(ch)
    go func() {
        for n := range ch {
            fmt.Println("读者1range:", n)
        }
        wg.Done()
    }()
    go func() {
        for n := range ch {
            fmt.Println("\t读者2range:", n)
        }
        wg.Done()
    }()
    wg.Wait()
}

运行并随机输入一段字母,并按回车

faaaaaaaaafafafadvafdgadf
    读者2range: f
    读者2range: a
    读者2range: a
    读者2range: a
    读者2range: a
    读者2range: a
    读者2range: a
    读者2range: a
    读者2range: a
    读者2range: f
    读者2range: a
    读者2range: f
    读者2range: a
    读者2range: f
    读者2range: a
    读者2range: d
    读者2range: v
    读者2range: a
    读者2range: f
    读者2range: d
读者1range: a
读者1range: a
读者1range: d
读者1range: f
    读者2range: g

点击个人博客,查看更多文章https://elonjelinek.github.io/

你可能感兴趣的:(go语言)