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)

	}

}
相关推荐
何中应10 分钟前
Spring Boot中选择性加载Bean的几种方式
java·spring boot·后端
阿俊仔(摸鱼版)14 分钟前
Python 常用运维模块之OS模块篇
运维·开发语言·python·云服务器
军训猫猫头14 分钟前
56.命令绑定 C#例子 WPF例子
开发语言·c#·wpf
sunly_21 分钟前
Flutter:自定义Tab切换,订单列表页tab,tab吸顶
开发语言·javascript·flutter
远方 hi32 分钟前
linux虚拟机连接不上Xshell
开发语言·php·apache
涛ing41 分钟前
23. C语言 文件操作详解
java·linux·c语言·开发语言·c++·vscode·vim
NoneCoder42 分钟前
JavaScript系列(42)--路由系统实现详解
开发语言·javascript·网络
半桔1 小时前
栈和队列(C语言)
c语言·开发语言·数据结构·c++·git
九离十1 小时前
C语言教程——文件处理(1)
c语言·开发语言
小高不明1 小时前
仿 RabbitMQ 的消息队列3(实战项目)
java·开发语言·spring·rabbitmq·mybatis