Go并发编程基础
Go并发编程基础
Goroutine
Goroutine 是 Go 的轻量级线程,创建成本极低(几KB 内存),可以轻松创建数万个并发任务。
go func() {
fmt.Println("running in goroutine")
}()Channel 通信
Channel 是 Goroutine 之间安全通信的机制:
ch := make(chan string, 100)
go func() {
ch <- "result"
}()
result := <-ch并发端口扫描器
func scanPort(host string, port int, results chan<- string) {
addr := fmt.Sprintf("%s:%d", host, port)
conn, err := net.DialTimeout("tcp", addr, time.Second)
if err == nil {
conn.Close()
results <- fmt.Sprintf("Port %d open", port)
}
}
func main() {
results := make(chan string, 100)
for port := 1; port <= 1024; port++ {
go scanPort("target", port, results)
}
// 收集结果...
}sync 包
- sync.WaitGroup:等待一组 Goroutine 完成
- sync.Mutex:互斥锁保护共享资源
- sync.Map:并发安全的 Map
总结
Go 的并发模型是其最大优势之一。利用 Goroutine + Channel 可以轻松构建高性能的并发扫描工具。