когда я добавляю multipart.NewWriter (body_buf), программа не останавливается - PullRequest
0 голосов
/ 25 июня 2018
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)

программа остановится и получит фатальную ошибку: deadlock

в чем разница, кто может сказать мне

1 Ответ

0 голосов
/ 25 июня 2018

Программа не остановится, так как вы никогда не закроете канал, и, таким образом, петля диапазона над ним не прекратится.Закройте канал в loop как

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

и он должен остановиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...