go - 当我添加 multipart.NewWriter(body_buf) 时,程序不会停止
问题描述
package main
import (
"fmt"
"mime/multipart"
"bytes"
)
var channel chan string = make(chan string)
func recognize(file_path string) {
body_buf := &bytes.Buffer{}
fmt.Println(body_buf)
send_writer := multipart.NewWriter(body_buf)
fmt.Println(send_writer)
}
func loop() {
for i := 0; i < 10; i++ {
channel <- "dd"
}
}
func main() {
go loop()
for v := range channel {
fmt.Println(len(channel), v)
}
}
程序不会停止,即使我不调用该recognize
函数,我也不知道为什么,如何解释
当我删除
send_writer := multipart.NewWriter(body_buf)
程序将停止并出现致命错误:死锁
有什么区别,谁能告诉我
解决方案
程序不会停止,因为您永远不会关闭通道,因此它上面的范围循环不会终止。loop
像这样关闭频道
func loop() {
for i := 0; i < 10; i++ {
channel <- "dd"
}
close(channel)
}
它应该停止。
推荐阅读
- java - Apache Ant Java API 未执行所有具有依赖关系的目标
- c# - 如何在 linq 中添加多个 where 子句?
- dart - Flutter - 使用通知向其他小部件发送消息
- ios - 如何设置 iOS 缓存和磁盘存储大小以及如何在应用程序终止后从磁盘存储中恢复缓存?
- c - 在C中将字符数组转换为int是否安全?
- xamarin - 我需要在 XamarinForms 上的日期选择器中阻止粘贴功能
- terraform - Terraform template_file vars 属性得到定义
- java - Spring Cloud Stream 的 OUTPUT 通道的并发(线程执行器)
- python - Subprocess.call 未正确将命令传递到命令行
- javascript - 如何使函数仅与每个克隆的 div 单独运行而不与原始 div 一起运行