| package main |
| |
| import ( |
| "fmt" |
| "io" |
| "log" |
| "net/http" |
| "os" |
| "regexp" |
| "strings" |
| "sync" |
| ) |
| |
| |
| func gomoun(c chan int) { |
| for i := 0; i < 10000; i++ { |
| c <- i |
| } |
| close(c) |
| } |
| |
| func main() { |
| ch1 := make(chan int) |
| go gomoun(ch1) |
| for v := range ch1 { |
| fmt.Println(v) |
| } |
| |
| } |
其它demo
| package main |
| |
| import ( |
| "fmt" |
| "sync" |
| ) |
| |
| func worker(id int, ch chan int, wg *sync.WaitGroup) { |
| defer wg.Done() |
| result := id * 2 |
| ch <- result |
| } |
| |
| func main() { |
| var wg sync.WaitGroup |
| ch := make(chan int, 5) |
| |
| for i := 1; i <= 5; i++ { |
| wg.Add(1) |
| go worker(i, ch, &wg) |
| } |
| |
| wg.Wait() |
| close(ch) |
| |
| for res := range ch { |
| fmt.Println("Result:", res) |
| } |
| } |
| |
请求
| package main |
| |
| import ( |
| "fmt" |
| "io/ioutil" |
| "net/http" |
| "sync" |
| ) |
| |
| |
| func fetch(url string, wg *sync.WaitGroup, ch chan<- string) { |
| defer wg.Done() |
| |
| resp, err := http.Get(url) |
| if err != nil { |
| ch <- fmt.Sprintf("Failed to fetch from %s: %v", url, err) |
| return |
| } |
| defer resp.Body.Close() |
| |
| body, err := ioutil.ReadAll(resp.Body) |
| if err != nil { |
| ch <- fmt.Sprintf("Failed to read body from %s: %v", url, err) |
| return |
| } |
| |
| ch <- fmt.Sprintf("Success from %s: %s", url, body) |
| } |
| |
| func main() { |
| urls := []string{ |
| "http://example.com", |
| "http://example.org", |
| "http://example.net", |
| } |
| |
| var wg sync.WaitGroup |
| ch := make(chan string, len(urls)) |
| |
| |
| for _, url := range urls { |
| wg.Add(1) |
| go fetch(url, &wg, ch) |
| } |
| |
| wg.Wait() |
| close(ch) |
| |
| |
| for result := range ch { |
| fmt.Println(result) |
| } |
| } |
| |
| package main |
| |
| import ( |
| "fmt" |
| "net/http" |
| "sync" |
| ) |
| |
| |
| func sendRequest(url string, wg *sync.WaitGroup, ch chan<- int) { |
| defer wg.Done() |
| resp, err := http.Get(url) |
| if err != nil { |
| fmt.Println("Error fetching URL", url, ":", err) |
| ch <- 0 |
| return |
| } |
| ch <- resp.StatusCode |
| resp.Body.Close() |
| } |
| |
| func main() { |
| urls := []string{ |
| "https://example.com", |
| "https://api.github.com", |
| "https://google.com", |
| } |
| |
| var wg sync.WaitGroup |
| statusCh := make(chan int, len(urls)) |
| |
| for _, url := range urls { |
| wg.Add(1) |
| go sendRequest(url, &wg, statusCh) |
| } |
| |
| wg.Wait() |
| close(statusCh) |
| |
| |
| for status := range statusCh { |
| fmt.Println("Received status code:", status) |
| } |
| } |
| |
next4
| package main |
| |
| import ( |
| "fmt" |
| "io/ioutil" |
| "net/http" |
| "sync" |
| ) |
| |
| func fetchBaidu(id int, results chan<- string, wg *sync.WaitGroup) { |
| defer wg.Done() |
| |
| |
| client := &http.Client{} |
| |
| |
| req, err := http.NewRequest("GET", "https://www.baidu.com", nil) |
| if err != nil { |
| results <- fmt.Sprintf("协程 %d: 创建请求失败: %v", id, err) |
| return |
| } |
| |
| |
| req.Header.Set("User-Agent", "Go-http-client/1.1") |
| |
| |
| resp, err := client.Do(req) |
| if err != nil { |
| results <- fmt.Sprintf("协程 %d: 请求失败: %v", id, err) |
| return |
| } |
| defer resp.Body.Close() |
| |
| |
| body, err := ioutil.ReadAll(resp.Body) |
| if err != nil { |
| results <- fmt.Sprintf("协程 %d: 读取响应失败: %v", id, err) |
| return |
| } |
| |
| results <- fmt.Sprintf("协程 %d: 响应状态码: %d, 内容长度: %d", id, resp.StatusCode, len(body)) |
| } |
| |
| func main() { |
| const numGoroutines = 10 |
| var wg sync.WaitGroup |
| results := make(chan string, numGoroutines) |
| |
| |
| for i := 1; i <= numGoroutines; i++ { |
| wg.Add(1) |
| go fetchBaidu(i, results, &wg) |
| } |
| |
| |
| wg.Wait() |
| close(results) |
| |
| |
| for result := range results { |
| fmt.Println(result) |
| } |
| } |
| |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2023-12-09 python中yield
2023-12-09 javaScript/js 【call,apply,bind】