Go функц гэдэг нь бусад функцтэй зэрэгцэн ажиллаж байгаа функц юм. Go функц үүсгэхийн тулд функцийн нэрний өмнө go
түлхүүр үгийг тавьж дуудах хэрэгтэй:
package main
import "fmt"
func f(n int) {
for i := 0; i < 10; i++ {
fmt.Println(n, ":", i)
}
}
func main() {
go f(0)
var input string
fmt.Scanln(&input)
}
Дээрх програм нь хоёр функцээс тогтоно. Эхнийх нь main()
функц өөрөө байна, хоёр дахь нь go f(0)
гэсэн дуудалтаар үүснэ. Ердийн үед функц дуудахад тухайн функц дотор бичигдсэн бүх заавар ажиллаж дууссаны дараа дараагийн мөрд програмын удирдлага шилждэг. Go функцийн тохиолдолд програмын удирдлага шууд дараагийн мөрд шилжинэ, ө.х Go функц дотор бичигдсэн зааврууд ажиллаж дуусахыг хүлээхгүй гэсэн үг. Үүнийг нотлон харуулах зорилгоор Scanln()
функцийг дуудсан байгаа. Энэ функц нь гараас мэдээлэл оруулахыг хүлээнэ, хэрэв ингэж хүлээхгүй бол програмын ажиллагаа шууд тасарч f()
функц тоонуудыг хэвлэж амжихгүй тасрах болно.
Go функц нь маш хөнгөн байдаг бөгөөд олон тоогоор үүсгэх боломжтой байдаг. Жишээлбэл 10 ширхэг go функцийг дараах байдлаар үүсгэж болно:
func main() {
for i := 0; i < 10; i++ {
go f(i)
}
var input string
fmt.Scanln(&input)
}
Дээрх програмыг ажиллуулахад go функцүүд дарааллаар ажиллаад байгаа мэт харагдаж байгааг ажиглаарай. Ө.х тоонууд дэс дарааллын дагуу хэвлэгдэж байна. Үнэндээ go функцүүдыг дуудсан дарааллаар маш хурдан ажиллаж дуусаад байгаа учраас тэгж харагдаж байгаа юм. Зэрэг ажиллаж байгааг нотлохын тулд тоо хэвлэлтүүдийн хооронд бага зэрэг хүлээлт оруулая. Үүнд time.Sleep
ба rand.Intn
функцүүдийг хослуулан ашиглаж болно:
package main
import (
"fmt"
"time"
"math/rand"
)
func f(n int) {
for i := 0; i < 10; i++ {
fmt.Println(n, ":", i)
amt := time.Duration(rand.Intn(250))
time.Sleep(time.Millisecond * amt)
}
}
func main() {
for i := 0; i < 10; i++ {
go f(i)
}
var input string
fmt.Scanln(&input)
}
Өөрчлөлтийн үр дүнд f()
функц бүр 0 – 10 хүртэлх тоог 0 - 250 миллисекундын завсарлагатайгаар хэвлэнэ. Завсарлага оруулснаар бусад функцүүд зэрэг ажиллаж ижил үйлдлийг хийж байгаа гэдгийг харах боломжтой болсон байна.