package goTest1
import (
"fmt"
"testing"
)
func TestGo01(t *testing.T) {
ch01 := make(chan string)
ch02 := make(chan string)
endCh := make(chan int)
go sendChan01(ch01)
go sendChan02(ch02)
go getChanData(ch01, ch02, endCh)
endTag := true
for {
select {
case _, ok := <-endCh:
if !ok {
endTag = ok
}
}
if !endTag {
break
}
}
fmt.Println("任务完成")
}
func sendChan01(ch chan string) {
nameString := []string{"join", "jack", "tom", "many"}
for _, name := range nameString {
ch <- name
}
close(ch)
}
func sendChan02(ch chan string) {
nameString := []string{"join01", "jack01", "tom01", "many01"}
for _, name := range nameString {
ch <- name
}
close(ch)
}
func getChanData(ch01 chan string, ch02 chan string, endCh chan int) {
endTag := true
for {
select {
case v, ok := <-ch01:
if !ok {
ch01 = nil
} else {
go getTask(v)
}
case v, ok := <-ch02:
if !ok {
ch02 = nil
} else {
go getTask(v)
}
default:
if ch01 == nil && ch02 == nil {
endCh <- 1
endTag = false
}
}
if !endTag {
close(endCh)
break
}
}
fmt.Println("我去执行其他任务了")
}
func getTask(name string) {
fmt.Println(name)
}