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)

	}

}
相关推荐
码事漫谈7 小时前
黄仁勋被裁第一天,就收到了橄榄枝
后端
金銀銅鐵8 小时前
带您看懂字节码指令(二):空循环里有什么
java·后端·ai编程
§ꦿCFོ༉8 小时前
嵌入式八股文—C语言入门学习(四)
c语言·开发语言·学习
投图匠9 小时前
十种不同风格的 CTP接口 框架
开发语言·python
皮皮林5519 小时前
比 Xshell 还好用的 SSH 客户端神器,MobaXterm 太爱了!
后端
我不会起名字32210 小时前
会话缓存失效排查:区分 Redis 失效与节点广播
redis·后端·go·即时通讯·im·故障排查
深入云栈12 小时前
Netty 4.2.x 源码深度解析 (二十三):ByteBuf 核心设计 —— 索引、类型与零拷贝
java·后端·架构
JackJiang12 小时前
IM踩坑:聊天消息ID怎么设计?一个UUID搞不定,我用双ID解决
后端·架构
开心猴爷12 小时前
iOS 上架 App 流程
后端·ios
爱笑的k1112 小时前
nano-vllm 源码剖析:千行 Python 手写离线推理引擎的调度、显存与并行时序
开发语言·python·vllm