首次提交:初始化项目代码

This commit is contained in:
sunct
2026-07-31 15:18:32 +08:00
commit d6393266b0
193 changed files with 14287 additions and 0 deletions
+61
View File
@@ -0,0 +1,61 @@
package main
/*import (
"fmt"
"sync"
)
// 工作函数,演示通道作为信号量
func worker(id int, sem chan struct{}, wg *sync.WaitGroup) {
defer wg.Done()
// 获取信号量
sem <- struct{}{}
defer func() { <-sem }() // 释放信号量
fmt.Printf("Worker %d 开始工作\n", id)
// 模拟工作
for i := 0; i < 3; i++ {
fmt.Printf("Worker %d 工作中...\n", id)
}
fmt.Printf("Worker %d 完成工作\n", id)
}
func main() {
// 带缓冲通道(容量2
chBuffered := make(chan int, 2)
chBuffered <- 1 // 发送不阻塞(未达容量)
chBuffered <- 2
fmt.Println(<-chBuffered) // 接收:1
fmt.Println(<-chBuffered) // 接收:2
close(chBuffered)
// 关闭后发送会panic,接收返回零值
if v, ok := <-chBuffered; ok {
fmt.Println(v)
} else {
fmt.Println("通道已关闭") // 输出此句
}
// 无缓冲通道(发送/接收需同时就绪)
chUnbuffered := make(chan string)
go func() {
chUnbuffered <- "hello from goroutine" // 发送方:等待接收
}()
msg := <-chUnbuffered // 接收方:等待发送
fmt.Println(msg) // 输出:hello from goroutine
close(chUnbuffered)
// 通道实现信号量(限制并发数)
var wg sync.WaitGroup
sem := make(chan struct{}, 2) // 并发数限制为2
for i := 1; i <= 5; i++ {
wg.Add(1)
go worker(i, sem, &wg)
}
wg.Wait()
close(sem)
fmt.Println("所有工作完成")
}
*/