Ich bin verwirrt von einigen seltsamen Verhalten, das ich mit SMTP aus einer Goroutine gefunden.Seltsames Verhalten mit SMTP in Goroutine
Beim Versuch, eine E-Mail mit dem folgenden Code zu senden, startet meine SendMail-Funktion (ich kann eine Protokollnachricht sehen), aber nie abgeschlossen. Es hängt einfach.
Wenn ich jedoch einen weiteren Anruf zu SendMail hinzufüge - zwei E-Mails werden beide erfolgreich gesendet.
func main() {
go SendEmail("TEST")
SendEmail("TEST")
for {}
}
Kann jemand erklären, was vor sich geht?
NB Dies ist eine sehr vereinfachte Version einer Aufgabe geplant, damit die while-Schleife
-Code E-Mail senden:
func SendEmail(message string) {
log.Print("Sending email")
from, password, to := "[email protected]", "PASSWORD", "[email protected]"
err := smtp.SendMail(
"smtp.gmail.com:587",
smtp.PlainAuth("", from, password, "smtp.gmail.com"),
from,
[]string{to},
[]byte(message),
)
if err != nil {
log.Fatal(err)
}
log.Print("Sending complete")
}
Dank!
Was passiert, wenn Sie 'runtime.Gosched()' in die leere for-Schleife einfügen? – ctcherry
Ersetzen Sie 'for {}' durch 'select {}'. Es ist wahrscheinlich ein Scheduler-Problem, das jemand anderes ausführlicher erklären wird :) – joshlf
Mögliches Duplikat von [Golang http Server blockiert, wenn eine Goroutine der Endlosschleife beginnt] (http://stackoverflow.com/questions/26624959/golang-http-server-blocks-when-starts-eine-goroutine-of-endless-loop) –