یک goroutine (روال گو) یک نخ سبک اجرایی است.
package main import "fmt" func f(from string) { for i := 0; i < 3; i++ { fmt.Println(from, ":", i) } } func main() {
فرض کنید ما یک تابع داریم که (f(s
را فراخوانی میکند. اینجا ما اون رو از راه معمول فراخوانی میکنیم، اجرای آن به صورت همگام.
f("direct")
برای فراخوانی این تابع در goroutine, از (go f(s
استفاده کنید.این goroutineجدید میتونه به صورت همروند با یکبار فراخوانی اجرا بشه.
go f("goroutine")
شما همچنین میتونید یک goroutine رو برای فراخوانی یک تابع ناشناس شروع کنید .
go func(msg string) { fmt.Println(msg) }("going")
حالا فراخوانی هردوتابع ما به صورت ناهمگام در goroutineهای جدا اجرا میشه،بنابراین اجرا در اینجا اتفاق می افتد. این Scanln
نیاز داره که ما یک کلید رو قبل از اجرای برنامه فشار بدهیم.
fmt.Scanln() fmt.Println("done") }
وقتی ما این برنامه رو اجرا میکنیم, فراخوانی های بلوکه رو در اول میبینیم ،سپس خروجی ترکیبی از دو goroutineهامون رو مشاهده میکنیم. این ترکیب نشان میدهد که goroutineها به صورت همزمان به وسیله زمان اجرای زبان گو اجرا میشوند.
$ go run goroutines.go direct : 0 direct : 1 direct : 2 goroutine : 0 going goroutine : 1 goroutine : 2 <enter> done
در مبحث بعدی ما به مکمل goroutineها در همروندی برنامه های گو نگاه می اندازیم: کانالها.
<<خطاها-----------------------------------------------کانالها>>