在 Linux 下,使用 Golang 進行并發編程主要依賴于 goroutines 和 channels。goroutines 是輕量級的線程,可以在程序中同時運行多個任務。channels 用于在 goroutines 之間傳遞數據。以下是一些使用 Golang 進行并發編程的基本概念和示例:
要創建一個 goroutine,只需在函數調用前加上關鍵字 go
。例如:
package main
import (
"fmt"
"time"
)
func printNumbers() {
for i := 1; i <= 5; i++ {
fmt.Printf("Number: %d\n", i)
time.Sleep(1 * time.Second)
}
}
func main() {
go printNumbers()
time.Sleep(6 * time.Second)
}
在這個例子中,我們創建了一個名為 printNumbers
的函數,它會打印數字 1 到 5,每次打印之間暫停 1 秒。在 main
函數中,我們使用 go
關鍵字創建了一個新的 goroutine 來運行 printNumbers
函數。
channels 用于在 goroutines 之間傳遞數據。要創建一個 channel,可以使用 make
函數:
ch := make(chan int)
要在 goroutine 之間發送和接收數據,可以使用 <-
操作符:
// 發送數據到 channel
ch <- 42
// 從 channel 接收數據
value := <-ch
以下是一個使用 channels 的示例:
package main
import (
"fmt"
"time"
)
func printNumbers(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 printNumbers(ch)
for num := range ch {
fmt.Printf("Received number: %d\n", num)
}
}
在這個例子中,我們創建了一個名為 printNumbers
的函數,它接收一個整數類型的 channel 作為參數。函數內部,我們使用 <-
操作符將數字發送到 channel。在 main
函數中,我們創建了一個 channel,并將其傳遞給 printNumbers
函數。然后我們使用 for
循環和 range
關鍵字從 channel 接收數據并打印。
這些是 Golang 并發編程的基本概念。你可以根據需要組合和擴展這些概念來實現更復雜的并發任務。