Zum Inhalt springen
_CORE
KI & Agentensysteme Unternehmensinformationssysteme Cloud & Platform Engineering Datenplattform & Integration Sicherheit & Compliance QA, Testing & Observability IoT, Automatisierung & Robotik Mobile & Digitale Produkte Banken & Finanzen Versicherungen Öffentliche Verwaltung Verteidigung & Sicherheit Gesundheitswesen Energie & Versorgung Telko & Medien Industrie & Fertigung Logistik & E-Commerce Retail & Treueprogramme
Referenzen Technologien Blog Know-how Tools
Über uns Zusammenarbeit Karriere
CS EN DE
Lassen Sie uns sprechen

Go Concurrency — goroutines a channels

28. 10. 2024 1 Min. Lesezeit intermediate

Das Concurrency-Modell von Go ist elegant — Goroutines sind leichtgewichtige „Threads”, Channels sind Kommunikationskanäle zwischen ihnen.

Goroutines

func fetchURL(url string, ch chan<- string) { resp, err := http.Get(url) if err != nil { ch <- fmt.Sprintf(“Error: %s”, err) return } ch <- fmt.Sprintf(“%s: %d”, url, resp.StatusCode) } func main() { urls := []string{“https://google.com”, “https://github.com”} ch := make(chan string, len(urls)) for _, url := range urls { go fetchURL(url, ch) } for range urls { fmt.Println(<-ch) } }

Select

select { case msg := <-ch1: fmt.Println(“ch1:”, msg) case msg := <-ch2: fmt.Println(“ch2:”, msg) case <-time.After(5 * time.Second): fmt.Println(“timeout”) }

sync.WaitGroup

var wg sync.WaitGroup for _, url := range urls { wg.Add(1) go func(u string) { defer wg.Done() fetch(u) }(url) } wg.Wait()

Wichtigste Erkenntnis

Goroutines für leichtgewichtige Nebenläufigkeit, Channels für Kommunikation, Select für Multiplexing. Don’t communicate by sharing memory.

goconcurrencygoroutineschannels
Teilen:

CORE SYSTEMS Team

Wir bauen Kernsysteme und KI-Agenten, die den Betrieb am Laufen halten. 15 Jahre Erfahrung mit Enterprise-IT.