go语言(十八)---- goroutine

一、goroutine

go 复制代码
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

go 复制代码
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()

go 复制代码
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)

	}

}

三、传入一个形参

go 复制代码
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)

	}

}
相关推荐
我是大猴子几秒前
Spring代理类为何依赖注入失效?
java·后端·spring
勿忘,瞬间6 分钟前
多线程之进阶修炼
java·开发语言
码事漫谈18 分钟前
手把手带你部署本地模型,让你Token自由(小白专属)
前端·后端
hoiii18735 分钟前
CSTR反应器模型的Simulink-PID仿真(MATLAB实现)
开发语言·matlab
炘爚1 小时前
C++ 右值引用与程序优化
开发语言·c++
码农BookSea1 小时前
ReAct:让大模型学会边想边做
后端·ai编程
si莉亚1 小时前
ROS2安装EVO工具包
linux·开发语言·c++·开源
清心歌1 小时前
CopyOnWriteArrayList 实现原理
java·开发语言
码农BookSea2 小时前
10分钟掌握 JSON-RPC 协议,面试加分、设计不踩坑
后端
良木生香2 小时前
【C++初阶】C++入门相关知识(2):输入输出 & 缺省参数 & 函数重载
开发语言·c++