package main

import "fmt"
import "time"



type person struct {
    name string
}

func (p *person) speak () {
    fmt.Println(p.name)
}


func NewPerson (name string) person {
    return person{name}
}






func dowork () chan string {
    yield := make(chan string)

    go func () {
        time.Sleep(time.Second * 5)
        yield <- "work complete"
    }()

    return yield
}

func predowork () {
    foo := dowork()

    bar := <-foo
    fmt.Println(bar)
}

func main () {

    go predowork()

    brian := NewPerson("brian")
    law := NewPerson("law")

    brian.speak()
    law.speak()

    fmt.Println("ended")


    var input string
    fmt.Scanln(&input)
}