[本文出自天外归云的博客园]
今天是5.21,是现代的年轻人喜爱过的节日,也是玫瑰花的葬礼。身为人生工程师,又有几人曾用代码谱写爱的史诗?
Keep something in my mind,异步永葆单身秘诀:
package main
import (
"log"
"testing"
"github.com/stretchr/testify/assert"
)
// Girl 女孩
type Girl struct {
// Name 名字
Name string
}
// AcceptConfess 接收表白
func (girl *Girl) AcceptConfess(boy Boy) {
log.Printf("%+v接收了%+v的表白", girl.Name, boy.Name)
boy.LovePraiseChan <- LovePraise{From: girl.Name, Words: "同意"}
}
// RefuseConfess 拒绝表白
func (girl *Girl) RefuseConfess(boy Boy) {
log.Printf("%+v拒绝了%+v的表白", girl.Name, boy.Name)
boy.LovePraiseChan <- LovePraise{From: girl.Name, Words: "不同意"}
}
// Boy 男孩
type Boy struct {
// Name 名字
Name string
// Status 状态(单身或非单身)
Status string
// LoveChan 爱的表白通道
LovePraiseChan chan LovePraise
}
// LovePraise 爱的表白
type LovePraise struct {
From string
To string
Words string
}
// WaitForLoveCallBack 等待爱的回复
func (me *Boy) WaitForLoveCallBack() LovePraise {
// 永葆单身
for {
select {
case rec := <-me.LovePraiseChan:
if rec.Words == "同意" {
return LovePraise{
From: me.Name,
To: rec.From,
Words: "我群发的,有人先同意了,下次",
}
} else if rec.Words == "不同意" {
return LovePraise{
From: me.Name,
To: rec.From,
Words: "我朋友拿我手机群发的",
}
}
}
}
}
// 测试爱的表达
func TestLovePraise(t *testing.T) {
// 开始测试
lucy := Girl{"Lucy"}
lily := Girl{"Lily"}
girls := []Girl{lucy, lily}
me := Boy{Name: "我", LovePraiseChan: make(chan LovePraise), Status: "单身"}
for i := 0; i < len(girls); i++ {
go func() {
// 异步等待爱的回复——不耽误正常吃饭睡觉
callBack := me.WaitForLoveCallBack()
log.Printf("%+v回复%+v道:%+v", callBack.From, callBack.To, callBack.Words)
}()
}
lucy.AcceptConfess(me)
lily.RefuseConfess(me)
// 断言
assert.Equal(t, "单身", me.Status)
}
运行结果:

本文来自博客园,作者:天外归云,转载请注明原文链接:https://www.cnblogs.com/LanTianYou/p/14793304.html
浙公网安备 33010602011771号