美文网首页
我被阿里云美女清宵的观后感给撩了

我被阿里云美女清宵的观后感给撩了

作者: 拼命三郎OL | 来源:发表于2018-11-19 03:54 被阅读0次

    这是她看完药神之后的观后感,看到chanel的声明,就吸引我一直把它读完。

    package main
    
    import (
        "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.Duration
    
        Health       Element
        Knowledge    Element
        Ability      Element
        RelationShip Element
        Wealth       Element
        OtherElement Element
    
        Work        Activity
        Study       Activity
        Exercise    Activity
        Entertain   Activity
        Rest        Activity
        OtherActive Activity
    
        isDoings []Activity
    
        vitalitySignal chan struct{}
        NaturalDeath   chan 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引用自 程序媛比码大赛 不秀美颜 秀代码-清宵参与的聚能聊话题-云栖社区

    相关文章

      网友评论

          本文标题:我被阿里云美女清宵的观后感给撩了

          本文链接:https://www.haomeiwen.com/subject/xgonfqtx.html