go如何控制一个函数只执行30S
可以用context.WithTimeout或者context.WithDeadline
p := context.TODO()
c, _ := context.WithTimeout(p, 30*time.Second)
wg := &sync.WaitGroup{}
wg.Add(1)
start := time.Now()
go func(ctx context.Context) {
defer wg.Done()
for{
select {
case <-c.Done():
return
default:
doSomething()
}
}
}(c)
wg.Wait()
fmt.Println(time.Since(start))