goroutine

什么是goroutine #

go语言的并发执行体称为goroutine
goroutine理解为轻量级线程、协程

创建goroutine #

使用go关键字及后面紧跟一个函数来创建goroutine
格式1: go func() {
        //这里写goroutine代码,函数的返回值忽略,也就是说不需要返回值
      }()
格式2: go func(参数列表) {
        //这里写goroutine代码,函数的返回值忽略,也就是说不需要返回值
      }(参数列表)

格式3:
    go 函数名()
    go 包名.函数名()
格式4:
    go 函数名(参数列表)
    go 包名.函数名(参数列表)
    
备注:
    1。一个函数中可以创建多个goroutine,一个goroutine必定对应一个函数
    2。go关键字后面函数的返回值会被忽略
    3。多个goroutine之间进行通信通过chan方式通信
    4。调度器不能保证多个goroutine的执行顺序

goroutine示例01 #

package main

import (
	"fmt"
	"time"
)

func f(from string) {
	for i := 0; i < 3; i++ {
		fmt.Println(from, ":", i)
	}
}

func main() {
	f("直接调用函数")
	go f("goroutine方法调用函数-1")
	go f("goroutine方法调用函数-2")
	go func(msg string) {
		fmt.Println(msg)
	}("going")
	time.Sleep(time.Second)
	fmt.Println("done")
}

执行样例如下:
直接调用函数 : 0
直接调用函数 : 1
直接调用函数 : 2
goroutine方法调用函数-2 : 0
goroutine方法调用函数-1 : 0
goroutine方法调用函数-1 : 1
goroutine方法调用函数-1 : 2
going
goroutine方法调用函数-2 : 1
goroutine方法调用函数-2 : 2
done

以上说明多个goroutine的执行先后顺序是不确定的,由电脑的cpu调度决定
协程之间是交替执行的
Build by Loppo 0.6.15