package main import"fmt" funcmain() { // Variables and Constants var name string = "John Doe" age := 30 const pi = 3.14159 fmt.Printf("Name: %s, Age: %d\n", name, age) fmt.Printf("Value of pi: %f\n", pi) }
探索数据结构
在深入研究该语言的并发特性之前,让我们先了解Go中的基础数据结构。
a. 数组:
Go中的数组是固定大小的、具有相同数据类型的元素序列。
package main import"fmt" funcmain() { // Arrays var numbers [5]int numbers = [5]int{1, 2, 3, 4, 5} fmt.Println("Array:", numbers) }
package main import"fmt" funcsum(values []int, resultChan chanint) { sum := 0 for _, value := range values { sum += value } resultChan <- sum } funcmain() { values := []int{1, 2, 3, 4, 5} resultChan := make(chanint) go sum(values, resultChan) total := <-resultChan fmt.Println("Total sum:", total) }
b. 协程:
Goroutines是轻量级的、并发的函数,能够有效地处理多个任务。
package main import"fmt" funcprintNumbers() { for i := 1; i <= 5; i++ { fmt.Println("Number:", i) } } funcmain() { go printNumbers() fmt.Println("This will be executed concurrently with printNumbers()") }
c. 使用WaitGroups同步:
WaitGroups有助于同步Goroutines并管理它们的完成。
package main import ( "fmt" "sync" ) funcprintNumbers(waitGroup *sync.WaitGroup) { defer waitGroup.Done() for i := 1; i <= 5; i++ { fmt.Println("Number:", i) } } funcmain() { var waitGroup sync.WaitGroup waitGroup.Add(1) go printNumbers(&waitGroup) waitGroup.Wait() fmt.Println("All Goroutines are done!") }