/* * @Author: your name * @Date: 2021-08-02 00:02:17 * @LastEditTime: 2021-08-24 23:18:40 * @LastEditors: Please set LastEditors * @Description: In User Settings Edit * @FilePath: \background\test\goroutine_test.go */ package test import ( "context" "sync" "testing" "time" ) func TestWaitGroup(t *testing.T) { var wg sync.WaitGroup wg.Add(2) go func() { time.Sleep(3 * time.Second) t.Logf("job 1 done") wg.Done() }() go func() { time.Sleep(2 * time.Second) t.Logf("job 2 done") wg.Done() }() wg.Wait() t.Log("all finish") } func TestChanel(t *testing.T) { exit := make(chan bool) go func() { for { select { case <-exit: t.Logf("exit 1") return case <-time.After(1 * time.Second): t.Logf("time out ") } } }() go func() { for { select { case <-exit: t.Logf("exit 2") return case <-time.After(1 * time.Second): t.Logf("time out ") } } }() time.Sleep(5 * time.Second) exit <- true t.Logf("finish") } type TestInherit struct { context.Context x int32 } func TestTimeoutContext(t *testing.T) { ctx, _ := context.WithTimeout(context.Background(), time.Second*1) aa := TestInherit{ctx, 1} go func(aa *TestInherit) { for { select { case <-aa.Done(): t.Logf("exit") return case <-time.After(5 * time.Second): t.Logf("time out ") } } }(&aa) time.Sleep(10 * time.Second) } func TestContext(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) go func() { for { select { case <-ctx.Done(): t.Logf("exit") return case <-time.After(1 * time.Second): t.Logf("time out ") } } }() go func() { for { select { case <-ctx.Done(): t.Logf("exit") return case <-time.After(1 * time.Second): t.Logf("time out ") } } }() go func() { for { select { case <-ctx.Done(): t.Logf("exit") return case <-time.After(1 * time.Second): t.Logf("time out ") } } }() time.Sleep(5 * time.Second) cancel() t.Logf("finish") }