Go 语法与基础
约 75 分钟A3: 并发基础
学习 goroutine、channel 和 select,理解 Go 并发模型与 JS 异步的差异
学习目标
- 1.理解 goroutine 与线程、Promise 的区别
- 2.掌握 channel 的创建、发送、接收操作
- 3.学会使用 select 处理多 channel 场景
课程内容
本课时将帮助你快速掌握相关知识。以下是示例代码:
main.go
1package main2 3import "fmt"4 5func main() {6 fmt.Println("Hello, Go!")7 8 // Go 的变量声明9 var name string = "TypeScript Developer"10 age := 25 // 短变量声明11 12 fmt.Printf("Name: %s, Age: %d\n", name, age)13}上面的代码演示了 Go 的基本语法,包括包声明、导入和变量声明。 注意第 8 行的短变量声明语法 :=,这是 Go 的特色。
与 TypeScript 对比
example.ts
// TypeScript 版本const name: string = "TypeScript Developer";const age = 25; // 类型推断 console.log(`Name: ${name}, Age: ${age}`);实战练习
并发计算平方和
进阶
使用 goroutine 和 channel 并发计算 1-100 的平方和
初始代码
Go
1package main2 3import "fmt"4 5func main() {6 // 创建一个 channel 用于收集结果7 results := make(chan int)8 9 // 启动 goroutine 计算每个数的平方10 for i := 1; i <= 100; i++ {11 go func(n int) {12 // 请补全:将 n 的平方发送到 channel13 }(i)14 }15 16 // 收集所有结果并求和17 sum := 018 for i := 0; i < 100; i++ {19 // 请补全:从 channel 接收结果并累加20 }21 22 fmt.Println("Sum of squares:", sum)23}查看参考答案
Go
1package main2 3import "fmt"4 5func main() {6 results := make(chan int)7 8 for i := 1; i <= 100; i++ {9 go func(n int) {10 results <- n * n11 }(i)12 }13 14 sum := 015 for i := 0; i < 100; i++ {16 sum += <-results17 }18 19 fmt.Println("Sum of squares:", sum)20}