iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 11
1
自我挑戰組

Go劍復國-30天導入Golang系列 第 11

Golang goroutine

接下來要進到 golang 的重點特色之一 goroutine ,江湖傳言,你寫 golang 沒用到 goroutine 以及 channel,就不算寫過 golang。 channel 會在明天的章節介紹,今天先來 goroutine

goroutine

goroutine 的使用也很簡單,不像其他語言 ex java 還要 implement thread interface .... ,才能做到 concurrency ,它只要使用 go 這個 keyword,就可以完成。

package main

import (
	"fmt"
	"time"
)

func Print() {
	for i := 0; i < 10; i++ {
		fmt.Println(i)
		time.Sleep(1 * time.Second)
	}
}

func main() {

	go Print()

	for i := 1000; i < 1010; i++ {
		fmt.Println(i)
		time.Sleep(1 * time.Second)
	}
}

https://play.golang.org/p/Te63URbwM9I

由上面範例可以看到,在 main 裡面的迴圈值跟 Print 裡面迴圈的值,交錯印出來。表示 Print 這個 func 跟 main 裡面,是平行處理的。

這邊另外示範一個例子

package main

import (
	"fmt"
	"time"
)

func Print() {
	for i := 0; i < 10; i++ {
		fmt.Println(i)
		time.Sleep(1 * time.Second)
	}
}

func main() {

	go Print()
	time.Sleep(1 * time.Second)
	fmt.Println("Hello world")

}

https://play.golang.org/p/7AHRUQrU9CL

在這邊可以看到 Print 裡面的值,只印出了幾個就中斷了。原因是,任何情況下,只要 main thread (主線程) 中斷或結束,所有的子線程(goroutine)都會中斷。


上一篇
Golang Interface
下一篇
Golang channel
系列文
Go劍復國-30天導入Golang30

1 則留言

1
t22640738
iT邦新手 5 級 ‧ 2018-11-09 06:24:49

這裡是不是有typo?
gorotuine
goroutine

syhlion iT邦新手 5 級 ‧ 2018-11-09 10:08:11 檢舉

感謝QQ 馬上修正

我要留言

立即登入留言