package main

import "fmt"

func test()  {
defer fmt.Println("cccccccccccc")//在函数退出前执行
fmt.Println("ddddddddddddddd")
} func main() { go func() {
fmt.Println("aaaaaaaaaaaaaaaaaa")
test()
fmt.Println("bbbbbbbbbbbbbbbbb")
}() for true {
}
}

这里执行的结果为

aaaaaaaaaaaaaaaaaa
ddddddddddddddd
cccccccccccc
bbbbbbbbbbbbbbbbb

但是如果在defer fmt.Println("cccccccccccc")的下面加一句return呢?

...
func test() {
defer fmt.Println("cccccccccccc")//在函数退出前执行
return
fmt.Println("ddddddddddddddd")
}
...

那么执行结果就是

aaaaaaaaaaaaaaaaa
cccccccccccc
bbbbbbbbbbbbbbbbb

return的意思是终止此函数,那么在终止前又有一个defer所以才会打印ccccccccc,那么dddddddddddd自然不会被执行

下面我们的goexit出场

package main

import (
"fmt"
"runtime"
) func test() {
defer fmt.Println("cccccccccccc")//在函数退出前执行
//return
runtime.Goexit() //退出所在子协程
fmt.Println("ddddddddddddddd")
} func main() { go func() {
fmt.Println("aaaaaaaaaaaaaaaaaa")
test()
fmt.Println("bbbbbbbbbbbbbbbbb")
}() for true {
}
}

那么执行结果就是

aaaaaaaaaaaaaaaaaa
cccccccccccc

因为goexit的意思的退出所在子协程,所以连bbbbbbbbb都不会被打印了

[GO]goexit的使用的更多相关文章

  1. Golang进程权限调度包runtime三大函数Gosched、Goexit、GOMAXPROCS

    转自:https://www.cnblogs.com/wt645631686/p/9656046.html runtime.Gosched(),用于让出CPU时间片,让出当前goroutine的执行权 ...

  2. go语言之进阶篇runtime包中 Gosched Goexit GOMAXPROCS的使用

    一.runtime包 1.Gosched的使用 runtime.Gosched() 用于让出CPU时间片,让出当前goroutine的执行权限,调度器安排其他等待的任务运行,并在下次某个时候从该位置恢 ...

  3. 浅析runtime包中的三个方法Gosched、Goexit、GOMAXPROCS

    Gosched 暂停当前goroutine,使其他goroutine先行运算.只是暂停,不是挂起,当时间片轮转到该协程时,Gosched()后面的操作将自动恢复 未使用Gosched的代码 packa ...

  4. Goexit

    package main import ( "fmt" "runtime" ) func test() { defer fmt.Println("cc ...

  5. Golang中的Gosched、Goexit、GOMAXPROCS

    Golang进程权限调度包runtime三大函数Gosched,Goexit,GOMaXPROCS runtime.Gosched(),用于让出CPU时间片,让出当前goroutine的执行权限,调度 ...

  6. Go语言的堆栈分析

    本文为理解翻译,原文地址:http://www.goinggo.net/2015/01/stack-traces-in-go.html Introduction 在Go语言中有一些调试技巧能帮助我们快 ...

  7. 【Go入门教程7】并发(goroutine,channels,Buffered Channels,Range和Close,Select,超时,runtime goroutine)

    有人把Go比作21世纪的C语言,第一是因为Go语言设计简单,第二,21世纪最重要的就是并行程序设计,而Go从语言层面就支持了并行. goroutine goroutine是Go并行设计的核心.goro ...

  8. Go语言语法汇总(转)

    Go语言语法汇总 分类: 技术2013-09-16 14:21 3007人阅读 评论(0) 收藏 举报 go语言golang并发语法   目录(?)[+]   最近看了看GoLang,把Go语言的语法 ...

  9. go并发和并行

    Go语言的并发和并行 不知道你有没有注意到一个现象,还是这段代码,如果我跑在两个goroutines里面的话: var quit chan int = make(chan int) func loop ...

随机推荐

  1. 准确计算Java中对象的大小

    由于在项目中需要大致计算一下对象的内存占用率(Hadoop中的Reduce端内存占用居高不下却又无法解释),因此深入学习了一下如何准确计算对象的大小. 使用system.gc()和java.lang. ...

  2. 3D角色渲染到2D界面上

    using UnityEngine; using System.Collections; using System.Collections.Generic; using Carrie.Net; usi ...

  3. Understanding OpenStack Authentication: Keystone PKI

    The latest stable release of OpenStack, codenamed Grizzly, revolutionizes the way user authenticatio ...

  4. python学习(二十二) Python 中boolean

  5. 导出ExcelDemo

    public String exportExcel(){ String message=null; SimpleDateFormat df =new SimpleDateFormat("yy ...

  6. Android关于inflate的root参数

    最近在用View inflate(Context context, int resource, ViewGroup root)方法时,在第三个参数root上碰到了点麻烦. 一般在写ListView的a ...

  7. eclipse 使用lombok 精简java bean

    前言:             lombok 提供了简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 java 代码.特别是相对于 POJO             lombok 的官方网址 ...

  8. Flask之视图(二)

    2.2 扩展 上下文:相当于一个容器,保存了Flask程序运行过程中的一些信息. Flask中有两种上下文,请求上下文和应用上下文. 请求上下文(request context) request和se ...

  9. [z]单次遍历带权随机选取

    http://www.gocalf.com/blog/weighted-random-selection.html 没事可以看看,这个博客里面很多文章不错

  10. SuggestFrameWork js代码结构

    关于suggestFrameWork的使用教程网上很多,如果您仅仅想知道如何使用请移步.这里展现一下js代码实现结构 下载地址 http://sourceforge.net/projects/sugg ...