首页 > 编程笔记 > Go语言笔记

Go语言go关键字创建协程

Go 语言是从 main() 函数开始执行,程序启动默认为 main() 函数创建一个协程,只要函数中使用关键字 go 即可创建新的协程执行并发。

关键字 go 后面设置某个函数,让协程对该函数执行并发操作,其语法如下:
go func(parameter)
语法格式说明如下:
按照关键字 go 的语法格式,通过示例说明如何实现 Go 语言的并发编程,示例如下:
package main

import (
    "fmt"
    "time"
)

func running() {
    // 循环5次
    for i := 0; i < 5; i++ {
         fmt.Println("tick", i)
         // 延时1秒
         time.Sleep(1 * time.Second)
    }
}

func main() {
    // 并发执行程序
    go running()
    // 主程序
    for i := 0; i < 5; i++ {
         time.Sleep(1 * time.Second)
         fmt.Println("Waitting for you")
    }
}
运行上述代码,结果为:

tick 0
tick 1
Waitting for you
Waitting for you
tick 2
tick 3
Waitting for you
Waitting for you
tick 4
Waitting for you

从运行结果看到,程序首先为 main() 函数创建一个协程,然后使用关键字 go 为函数 running() 创建新的协程,Go 语言的调度机制自动为两个协程进行资源调度,从而完成并发过程。

我们知道函数定义可以分为 4 种类型,分别是:
在并发操作中,有返回值的函数会被忽略返回值,如果需要从并发中返回数据,只能使用通道实现,将需要返回的数据写入通道,主函数或其他并发函数都能从通道读取数据,从而实现数据共享。

定义并发函数只需要考虑是否需要设置函数参数,下面通过示例讲述带参数的函数如何实现并发过程:
package main

import (
    "fmt"
    "time"
)

func running(name string) {
    // 循环5次
    for i := 0; i < 5; i++ {
         fmt.Printf("tick %v, %v\n", i, name)
         // 延时1秒
         time.Sleep(1 * time.Second)
    }
}

func main() {
    // 并发执行程序
    var name = "Tom"
    go running(name)
    // 主程序
    for i := 0; i < 5; i++ {
         time.Sleep(1 * time.Second)
         fmt.Println("Waitting for you")
    }
}
代码的运行结果为:

tick 0, Tom
Waitting for you
tick 1, Tom
Waitting for you
tick 2, Tom
Waitting for you
tick 3, Tom
Waitting for you
tick 4, Tom
Waitting for you

相关文章