使用

协程goroutine在Go语言中属于轻量级的线程,我们可以通过命名函数和匿名函数来启动一个新的goroutine。

命名函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package test

import (
"fmt"
"testing"
)

func setVto1(v *int) {
*v = 1
}
func setVto2(v *int) {
*v = 2
}

func Test_Goroutine(t *testing.T) {
v := new(int)
go setVto1(v)
go setVto2(v)
fmt.Println(*v)
}

在以上代码中的结果可能有多种情况,最后的”*v”可能是0、1或者2。

匿名函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package test

import (
"fmt"
"testing"
"time"
)

func Test_Goroutine(t *testing.T) {
go func(name string) {
fmt.Println(name)
}("a")
time.Sleep(time.Second)
}

我们通过go语句启动了一个匿名函数的并发线程,为了保证结果的输出,我们阻塞主goroutine1秒钟。