一、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)







