首页 > 解决方案 > 当我添加 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)

程序将停止并出现致命错误:死锁

有什么区别,谁能告诉我

标签: go

解决方案


程序不会停止,因为您永远不会关闭通道,因此它上面的范围循环不会终止。loop像这样关闭频道

func loop() {
    for i := 0; i < 10; i++ {
        channel <- "dd"
    }
    close(channel)
}

它应该停止。


推荐阅读