github.com/nibnait/go-learn@v0.0.0-20220227013611-dfa47ea6d2da/src/test/chapter/ch4/26_async_service_test.go (about) 1 package ch4 2 3 import ( 4 "fmt" 5 "testing" 6 "time" 7 ) 8 9 func service1() string { 10 time.Sleep(time.Millisecond * 50) 11 return "Done" 12 } 13 14 func otherTask() { 15 fmt.Println("working on something else") 16 time.Sleep(time.Millisecond * 100) 17 fmt.Println("Task is done.") 18 } 19 20 func TestService(t *testing.T) { 21 fmt.Println(service()) 22 otherTask() 23 } 24 25 func AsyncService1() chan string { 26 // 不带 buffer 的 channel,要等消息从 channel 中消费掉,才能退出 service 27 // retCh := make(chan string) 28 // buffer 的 channel, 可以不用等消息从 channel 消费掉,直接退出 service 29 retCh := make(chan string, 1) 30 go func() { 31 ret := service1() 32 fmt.Println("returned result.") 33 retCh <- ret 34 fmt.Println("service exited.") 35 }() 36 return retCh 37 } 38 39 // 40 func TestAsynService(t *testing.T) { 41 retCh := AsyncService1() 42 otherTask() 43 fmt.Println(<-retCh) 44 time.Sleep(time.Second * 1) 45 }