在Go語言中,實現并發編程主要依賴于Goroutines和Channels。Goroutines是輕量級的線程,它們在Go運行時環境中被調度和管理。Channels則是Goroutines之間進行通信的管道。
go
。這將使得函數在一個新的Goroutine中并發執行。例如:package main
import (
"fmt"
"time"
)
func printNumbers() {
for i := 1; i <= 5; i++ {
fmt.Printf("%d ", i)
time.Sleep(1 * time.Second)
}
}
func main() {
go printNumbers()
time.Sleep(6 * time.Second)
}
在這個例子中,printNumbers
函數在一個新的Goroutine中并發執行。main
函數等待6秒,以確保printNumbers
函數有足夠的時間完成打印操作。
ch := make(chan int)
這里,我們創建了一個名為ch
的Channel,用于傳遞整數類型的數據。
要在Goroutines之間發送數據,可以使用<-
操作符。例如:
ch <- 42
這將在Channel ch
中發送整數42
。
要在Goroutine中接收Channel中的數據,可以使用<-
操作符。例如:
value := <-ch
這將從Channel ch
中接收數據并將其存儲在變量value
中。
下面是一個使用Goroutines和Channels實現的簡單示例:
package main
import (
"fmt"
"time"
)
func sendNumbers(ch chan int) {
for i := 1; i <= 5; i++ {
ch <- i
time.Sleep(1 * time.Second)
}
close(ch)
}
func main() {
ch := make(chan int)
go sendNumbers(ch)
for value := range ch {
fmt.Printf("%d ", value)
}
}
在這個例子中,我們創建了一個名為sendNumbers
的函數,它接受一個Channel作為參數。這個函數將整數1到5發送到Channel中,然后關閉Channel。
在main
函數中,我們創建了一個名為ch
的Channel,并啟動sendNumbers
函數在一個新的Goroutine中執行。然后,我們使用for
循環和range
關鍵字從Channel中接收數據并打印出來。當Channel被關閉且沒有更多數據時,range
循環將自動結束。