1.创建目录
mkdir goTest
cd goTest
go mod init github.com/hds
2.创建main.go
vim main.go
package main
import (
"fmt"
)
func main() {
fmt.Println("zhangyabin")
}
3.编译
go build -o main main.go
4.运行
./main
5.go协程超时设置与等待go协程结束
package main
import (
"fmt"
"time"
"context"
"sync"
)
var wg sync.WaitGroup //定义一个同步等待的组
func AsyncCall(n int) {
ctx, cancel := context.WithTimeout(context.Background(), time.Duration(time.Second*20))
defer cancel()
go func() {
fmt.Println("start 执行export:", n)
d := time.Duration(n) * time.Second
time.Sleep(d)
fmt.Println("end 执行export:", n)
defer cancel()
}()
select {
case <-ctx.Done():
wg.Done() //减去一个计数
fmt.Println("call successfully!!!")
return
case <-time.After(time.Duration(time.Second * 21)):
wg.Done() //减去一个计数
fmt.Println("timeout!!!")
return
}
}
func main() {
go AsyncCall(1)
wg.Add(1) //添加一个计数
go AsyncCall(5)
wg.Add(1) //添加一个计数
go AsyncCall(22)
wg.Add(1) //添加一个计数
wg.Wait() //阻塞直到所有任务完成
fmt.Println("hds")
}