重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
goroutine該如何理解,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
我們提供的服務有:成都做網站、成都網站建設、微信公眾號開發、網站優化、網站認證、漢源ssl等。為上千多家企事業單位解決了網站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的漢源網站制作公司
(1). 假設有一個工程,需要三個工程隊來完成,他們的修建事件互相獨立,誰修建快誰先完成那部分,其他不需要等待其他工程隊.
package main
import (
"fmt"
"time"
)
func main() {
fmt.Println("開始施工")
go workTwo()
go workThree()
go workOne()
fmt.Println("等待總的工程施工完成")
time.Sleep(time.Second * 3)
}
// workOne 工程隊1修建一部分
func workOne() {
workTime := time.Millisecond * 3000 // 完成工程時間
time.Sleep(workTime)
fmt.Println("修建完成: workOne")
}
// workTwo 工程隊2修建一部分
func workTwo() {
workTime := time.Millisecond * 2500 // 完成工程時間
time.Sleep(workTime)
fmt.Println("修建完成: workTwo")
}
// workThree 工程隊3修建一部分
func workThree() {
workTime := time.Millisecond * 2000 // 完成工程時間
time.Sleep(workTime)
fmt.Println("修建完成: workThree")
}
(2). 給工程加上驗收功能,用go chan來實現
package main
import (
"fmt"
"time"
)
const (
workOneDone = "oneDone"
workTwoDone = "twoDone"
workThreeDone = "threeDone"
)
func main() {
fmt.Println("開始施工")
ch := make(chan string, 1)
go func() {
workTwo(ch)
}()
go func() {
workThree(ch)
}()
go func() {
workOne(ch)
}()
go func() {
test(ch)
}()
// 關閉chan
defer close(ch)
// 等待總工程完成
time.Sleep(time.Second * 5)
}
func test(ch chan string) {
for {
select {
case v := <-ch:
fmt.Printf("驗收該工程隊完成,%s \n", v)
default:
}
}
}
// workOne 工程隊1修建一部分
func workOne(ch chan string) {
workTime := time.Millisecond * 3000 // 完成工程時間
time.Sleep(workTime)
fmt.Println("修建完成: workOne")
ch <- workOneDone
}
// workTwo 工程隊2修建一部分
func workTwo(ch chan string) {
workTime := time.Millisecond * 2500 // 完成工程時間
time.Sleep(workTime)
fmt.Println("修建完成: workTwo")
ch <- workTwoDone
}
// workThree 工程隊3修建一部分
func workThree(ch chan string) {
workTime := time.Millisecond * 2000 // 完成工程時間
time.Sleep(workTime)
fmt.Println("修建完成: workThree")
ch <- workThreeDone
return
}
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注創新互聯行業資訊頻道,感謝您對創新互聯的支持。