一、goroutine
package main
import (
	"fmt"
	"time"
)
func main() {
	//用go创建承载一个形参为空,返回值为空的一个函数
	go func() {
		defer fmt.Println("A.defer")
		func() {
			defer fmt.Println("B.defer")
			//退出当前goroutine
			fmt.Println("B")
		}()
		fmt.Println("A")
	}()
	//死循环
	for  {
		time.Sleep(1 * time.Second)
	}
}

 二、退出方式
 1、return
package main
import (
	"fmt"
	"time"
)
func main() {
	//用go创建承载一个形参为空,返回值为空的一个函数
	go func() {
		defer fmt.Println("A.defer")
		return
		func() {
			defer fmt.Println("B.defer")
			//退出当前goroutine
			fmt.Println("B")
		}()
		fmt.Println("A")
	}()
	//死循环
	for  {
		time.Sleep(1 * time.Second)
	}
}

 2、用runtime.Goexit()
package main
import (
	"fmt"
	"runtime"
	"time"
)
func main() {
	//用go创建承载一个形参为空,返回值为空的一个函数
	go func() {
		defer fmt.Println("A.defer")
		//return
		func() {
			defer fmt.Println("B.defer")
			//退出当前goroutine
			runtime.Goexit()
			fmt.Println("B")
		}()
		fmt.Println("A")
	}()
	//死循环
	for  {
		time.Sleep(1 * time.Second)
	}
}

 三、传入一个形参
package main
import (
	"fmt"
	"time"
)
func main() {
	//用go创建承载一个形参为空,返回值为空的一个函数
	//go func() {
	//	defer fmt.Println("A.defer")
	//	//return
	//	func() {
	//		defer fmt.Println("B.defer")
	//		//退出当前goroutine
	//		runtime.Goexit()
	//		fmt.Println("B")
	//	}()
	//	fmt.Println("A")
	//}()
	//传入一个有参数的
	go func(a int,b int) bool {
		fmt.Println("a = ",a,"b = ",b)
		return true
	}(10,20)
	//死循环
	for  {
		time.Sleep(1 * time.Second)
	}
}

![P1042 [NOIP2003 普及组] 乒乓球 Java版最简单题解!](https://img-blog.csdnimg.cn/direct/371875312a184f9886ee14b5c45819f8.png)







![[已解决]504 Gateway Time-out 网关超时](https://img-blog.csdnimg.cn/img_convert/24ef331c2c94f4485b15c1ada9052b24.png)


![[数据结构]-哈希](https://img-blog.csdnimg.cn/direct/48c60aec62e4441db5eded28b6a4b9a4.png)







