golang中如何退出goroutine

package main

import (
	"fmt"
	"runtime"
	"time"
)

func main() {
	// 用goroutine创建承载一个形参为空,返回值为空的一个函数
	go func() {
		defer fmt.Println("A.defer")
		func() {
			defer fmt.Println("B.defer")
			// 退出当前的goroutine
			runtime.Goexit()
			fmt.Println("B")
		}()
		fmt.Println("A")
	}()
	time.Sleep(time.Millisecond * 200)

	// 因为goroutine是异步操作,所以不能直接拿到返回值的,
	// 如果两个goroutine中想互相通信,可以通过channel
	go func(a, b int) bool {
		fmt.Println("a = ", a, "b = ", b)
		return true
	}(10, 20)
}

// 输出结果
/*
	B.defer
	A.defer
*/

  

posted @ 2021-10-30 11:32  专职  阅读(180)  评论(0编辑  收藏  举报