我被阿里云美女清宵的观后感给撩了
这是她看完药神之后的观后感,看到chanel的声明,就吸引我一直把它读完。
package mainimport (
"fmt"
"math/rand"
"sync"
"time"
)var (
r = rand.New(rand.NewSource(time.Now().Unix()))disasterSignal = make(chan string)
accidentSignal = make(chan string)
diseaseSignal= make(chan string)
)// Element : abstract factor which life consisted by
type Element interface {
Improve()
Depress()
Stable()
Enable() bool
BeAbleHandle(event string) bool
}type Activity interface {
IsSuitable(life *Life) bool
Do(life *Life)
Interrupted()
}type Life struct {
Sex string
Age time.DurationHealthElement
KnowledgeElement
AbilityElement
RelationShip Element
WealthElement
OtherElement ElementWorkActivity
StudyActivity
ExerciseActivity
EntertainActivity
RestActivity
OtherActive ActivityisDoings []ActivityvitalitySignal chan struct{}
NaturalDeathchan struct{}
}func (f *Life) Join(oppositeSex *Life, love, family Element) (*Life, error) {
if !love.Enable() || !family.Enable() || f.Sex == oppositeSex.Sex {
return nil, fmt.Errorf("Sorry, no boby should be borned!")
}boby := &Life{
Sex:[]string{"male", "female"}[r.Intn(2)],
Age:0,
isDoings:[]Activity{},
NaturalDeath:make(chan struct{}),
vitalitySignal: make(chan struct{}),
}return boby, nil
}func (f *Life) Run() {
go ExternalEndanger(f)
// time elapses day by day
for {
startTime := time.Now().UTC()
wg := &sync.WaitGroup{}for _, active := range []Activity{f.Study, f.Work, f.Entertain, f.Exercise, f.Rest, f.OtherActive} {
if f.SuitableFor(active) {
wg.Add(1)
go func(activity Activity) {
defer wg.Wait()
activity.Do(f)
}(active)
}
}select {
case <-f.NaturalDeath:
f.Close()
fmt.Println("Life is short, make it colourful and cherish the love around all!")
return
case <-f.vitalitySignal:
fmt.Println("记得买保险!")
return
case <-time.After(24*time.Hour - time.Now().UTC().Sub(startTime)):
fmt.Println("One day went by...")
}
//wg.Wait()
f.Age += 24 * time.Hour
}fmt.Println("Goodbye, life!")
}func (f *Life) Somehow() {
// happened something to effect one to reach some life stage
}func (f *Life) SuitableFor(active Activity) bool {
return active.IsSuitable(f)
}func (f *Life) Survive(event string) bool {
for _, e := range []Element{f.Health, f.Knowledge, f.Ability, f.RelationShip, f.Wealth, f.OtherElement} {
if !e.BeAbleHandle(event) {
return false
}
}return true
}func (f *Life) Close() {
for _, doing := range f.isDoings {
doing.Interrupted()
}close(f.vitalitySignal)
}var female = LifeFromSomeWhere("female")
var male = LifeFromSomeWhere("male")func ExternalEndanger(f *Life) {
for {
event := ""
select {
case event = <-diseaseSignal:
case event = <-disasterSignal:
case event = <-accidentSignal:
}if !f.Survive(event) {
f.Close()
return
}
}
}func LifeFromSomeWhere(sex string) *Life {
life := &Life{Sex: sex}
life.Somehow()return life
}func main() {
// I don't know the question of "鸡生蛋 or 蛋生鸡"...
newLife, err := female.Join(male, ElementImp{Type: "love"}, ElementImp{Type: "family"})
if err == nil {
newLife.Run()
}
}
【我被阿里云美女清宵的观后感给撩了】原贴地址是阿里云云栖社区,拼命三郎OL引用自 程序媛比码大赛 不秀美颜 秀代码-清宵参与的聚能聊话题-云栖社区
推荐阅读
- 我要做大厨
- 一个小故事,我的思考。
- 家乡的那条小河
- 第三节|第三节 快乐和幸福(12)
- 这辈子我们都不要再联系了
- 死结。
- 跌跌撞撞奔向你|跌跌撞撞奔向你 第四章(你补英语,我补物理)
- 我从来不做坏事
- 喂,你结婚我给你随了个红包
- 祖母走了