1 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個贊
在這個例子中,你并沒有真正做任何事情,但是通過通道傳遞消息總是安全的——通道是語言中的基本并發(fā)原語之一。你讓自己對競爭條件的可能性持開放態(tài)度,這取決于send實(shí)際最終做什么。處理此問題的另一種方法是send從單個通道接收。
type Mailer struct{
Messages chan Message
}
func (m *Mailer) send() {
for message := range m.Messages {
fmt.Printf("Sending email to:`%s`\nSubject: %s\n%s\n\n", message.To, message.Subject, message.Body)
}
}
var mailer *Mailer
func Index(w http.ResponseWriter, r *http.Request) {
m := Message{"email@example.com", fmt.Sprintf("visited `%s`", r.URL.Path[1:]), "Lorem ipsum"}
mailer.Messages <- m
fmt.Fprintf(w, "Sent out email with subject line `%s`\n", m.Subject)
}
func main() {
mailer = &Mailer{
// buffer up to 100 message to be sent before blocking
Messages: make(chan Message, 100),
}
// start the mailer send loop
go mailer.send()
...
- 1 回答
- 0 關(guān)注
- 194 瀏覽
添加回答
舉報