Нет выходных данных после multipart.NewReader - PullRequest
0 голосов
/ 08 ноября 2018

Это, вероятно, невероятно просто, но ни один из Google не нашел ответа до сих пор. Почти 100% кода из документов здесь: https://golang.org/pkg/mime/multipart/#example_NewReader

Проблема в том, что я не могу ничего напечатать после цикла for, и я попытался закрыть все, что нужно, чтобы закрыть (см. Закомментированный код), но не могу понять, что это такое.

  package main

    import (
    "fmt"
    "io"
    "io/ioutil"
    "log"
    "mime"
    "mime/multipart"
    "net/mail"
    "strings"
)

func main() {
    msg := &mail.Message{
        Header: map[string][]string{
            "Content-Type": {"multipart/mixed; boundary=foo"},
        },
        Body: strings.NewReader(
            "--foo\r\nFoo: one\r\n\r\nA section\r\n" +
                "--foo\r\nFoo: two\r\n\r\nAnd another\r\n" +
                "--foo--\r\n"),
    }
    mediaType, params, err := mime.ParseMediaType(msg.Header.Get("Content-Type"))
    if err != nil {
        log.Fatal(err)
    }
    if strings.HasPrefix(mediaType, "multipart/") {
        mr := multipart.NewReader(msg.Body, params["boundary"])
        for {
            p, err := mr.NextPart()
            if err == io.EOF {
                return
            }
            if err != nil {
                log.Fatal(err)
            }
            slurp, err := ioutil.ReadAll(p)
            if err != nil {
                log.Fatal(err)
            }
            fmt.Printf("Part %q: %q\n", p.Header.Get("Foo"), slurp)
            // p.Close()

        }
        // mr.Close()
        // mr.Interface().(io.Closer).Close()
        // ioutil.NopCloser(mr)

    }

    // This does not print
    fmt.Printf("Test: %s\n", "asdfasdf")
    fmt.Println("Test")

}

Чего мне не хватает? Как бы я решил проблему отслеживания того, что мне не хватает?

1 Ответ

0 голосов
/ 08 ноября 2018

В настоящее время у вас нет возможности выйти из for без возврата, что также заставит вас выйти из функции. Похоже, вы хотите изменить

 if err == io.EOF {
     return
 }

до

 if err == io.EOF {
     break
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...