Go語言中的匿名goroutine
為了理解**匿名goroutine**,我們必須瞭解匿名函式和**goroutine**的存在。我們將首先探索匿名函式,這是**匿名goroutine**動機的真正原因,然後我們將學習一些關於**goroutine**是什麼的知識,最後檢查幾個**匿名goroutine**的例子。
匿名函式
在Go語言中,匿名函式是沒有名稱的函式。簡單地說,匿名函式在宣告時不使用任何變數作為名稱。
我們知道,我們使用如下所示的類似語法宣告一個函式。
func Sample(){
// some code
}雖然我們上面這個函式有名稱**(Sample)**,但在匿名函式的情況下,我們沒有名稱。
示例 1
下面是一個非常簡單的匿名函式示例。
package main
import (
"fmt"
)
func main() {
func(name string) {
fmt.Println("Welcome to", name)
}("TutorialsPoint")
}在上面的程式碼中,我們在我們Go程式的main函式內有一個匿名函式。這個匿名函式接受一個引數,並且在函式程式碼塊結束時立即傳遞引數。
輸出
如果我們使用命令**go run main.go**執行此程式碼,我們將看到以下輸出列印在終端中。
Welcome to TutorialsPoint
Go語言中的goroutine
**goroutine**是由Go執行時管理的極其輕量級的執行緒。使用**goroutine**,我們可以編寫非同步並行程式,這些程式可以比順序程式更快地執行某些任務。
Goroutine幫助我們使程式具有非同步特性,並讓我們在更短的時間內和更少的資源下完成更多工作。
因此,**匿名goroutine**背後的思想是,它只是一個在呼叫它的**goroutine**之外的單獨**goroutine**上執行的匿名函式。
示例 2
讓我們來看一個非常基本的**匿名goroutine**示例,以便更好地理解它。
package main
import (
"fmt"
"time"
)
func main() {
fmt.Println("before the anonymous goroutine")
go func(name string) {
fmt.Println("Welcome to", name)
}("TutorialsPoint")
time.Sleep(time.Second)
fmt.Println("after the anonymous goroutine")
}在上面的例子中,我們使用了一個**匿名goroutine**,為了確保main函式在goroutine完成其工作之前不結束,我們還編寫了一個**time.Sleep()**函式,該函式將第二個**fmt.Println()**延遲1秒。
輸出
如果我們使用go run main.go命令執行上面的程式碼,我們將看到以下輸出。
before the anonymous goroutine Welcome to TutorialsPoint after the anonymous goroutine
除了編寫**time.Sleep()**函式外,我們還可以使用任何阻塞**main goroutine**的函式,這將給**main**函式中的**匿名goroutine**足夠的時間來正確執行。
示例 3
考慮以下程式碼。
package main
import (
"fmt"
)
func main() {
func(name string) {
fmt.Println("Welcome to", name)
}("TutorialsPoint")
fmt.Scanln() // blocking call
}輸出
如果我們使用**go run main.go**命令執行上面的程式碼,我們將看到以下輸出。
Welcome to TutorialsPoint ...
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP