Heim >Backend-Entwicklung >Golang >Erstellung und Verwaltung von Goroutinen in Golang-Funktionen
Erstellen Sie in der Go-Sprache eine Goroutine mit dem Schlüsselwort go und einem Funktionsaufruf. Verwenden Sie beim Verwalten von Goroutine sync.WaitGroup für die Synchronisierung. Verwenden Sie das Kontextpaket, um Goroutine abzubrechen. Im tatsächlichen Kampf können damit Netzwerkanfragen, Bildverarbeitung und andere Aufgaben parallel verarbeitet werden.
Goroutine (Coroutine) ist eine leichte parallele Ausführungseinheit in der Go-Sprache, die mehrere Aufgaben gleichzeitig in einem einzigen Thread ausführen kann.
Eine Goroutine erstellen ist sehr einfach. Sie können das Schlüsselwort go
verwenden, gefolgt von einem Funktionsaufruf: go
关键字后跟一个函数调用即可:
func hello() { fmt.Println("Hello from goroutine") } func main() { go hello() // 创建一个执行 hello() 函数的 goroutine }
在处理共享资源时,需要对 goroutine 进行同步。使用 sync.WaitGroup
可以等待一组 goroutine 完成:
var wg sync.WaitGroup func hello(name string) { wg.Add(1) defer wg.Done() fmt.Println("Hello", name) } func main() { wg.Add(3) go hello("John") go hello("Mary") go hello("Bob") wg.Wait() // 等待所有 goroutine 完成 }
可以使用 context
import ( "context" "fmt" "time" ) func heavyComputation(ctx context.Context) { for { select { case <-ctx.Done(): fmt.Println("Computation cancelled") return default: // 执行计算 } } } func main() { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() go heavyComputation(ctx) time.Sleep(10 * time.Second) // 10 秒后取消计算 }Goroutine-Verwaltung
sync.WaitGroup
, um auf den Abschluss einer Gruppe von Goroutinen zu warten: func main() { urls := []string{"https://example.com", "https://example.net", "https://example.org"} var wg sync.WaitGroup for _, url := range urls { wg.Add(1) go func(url string) { resp, err := http.Get(url) if err != nil { log.Fatal(err) } resp.Body.Close() wg.Done() }(url) } wg.Wait() }
context
verwenden, um Goroutinen abzubrechen: func main() { images := []string{"image1.jpg", "image2.jpg", "image3.jpg"} var wg sync.WaitGroup for _, image := range images { wg.Add(1) go func(image string) { img, err := image.Decode(image) if err != nil { log.Fatal(err) } // 处理图像 wg.Done() }(image) } wg.Wait() }Praxisfall
Parallele Verarbeitung von Netzwerkanfragen:
🎜rrreee🎜🎜Parallele Verarbeitung von Bildverarbeitung: 🎜🎜rrreeeDas obige ist der detaillierte Inhalt vonErstellung und Verwaltung von Goroutinen in Golang-Funktionen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!