Loading concurrency/concurrency1.go +27 −0 Original line number Diff line number Diff line package concurrency // Sequence ... type Sequence chan int // SequenceOf returns a stream of numbers of the supplied value. func SequenceOf(v int) Sequence { i := make(Sequence) go func(x int, r Sequence) { for { r <- x } }(v, i) return i } // Take ... func (s Sequence) Take(c int) []int { r := []int{} for x := range s { r = append(r, x) } return r } concurrency/concurrency1_test.go +25 −0 Original line number Diff line number Diff line package concurrency import ( "reflect" "testing" ) func TestAnything(t *testing.T) { } func TestBasic(t *testing.T) { done := make(chan bool) go func(done chan bool) { t.Log("Hello from goroutine.") done <- true }(done) <-done t.Log("goroutine is done.") } func TestSequence(t *testing.T) { l0 := []int{1, 1, 1, 1, 1} if r := SequenceOf(1).Take(5); reflect.DeepEqual(r, l0) { t.Errorf("SequenceOf(1).Take(5) is %v, expected %v", r, l0) } //for _, tv := range []struct { // //} } Loading
concurrency/concurrency1.go +27 −0 Original line number Diff line number Diff line package concurrency // Sequence ... type Sequence chan int // SequenceOf returns a stream of numbers of the supplied value. func SequenceOf(v int) Sequence { i := make(Sequence) go func(x int, r Sequence) { for { r <- x } }(v, i) return i } // Take ... func (s Sequence) Take(c int) []int { r := []int{} for x := range s { r = append(r, x) } return r }
concurrency/concurrency1_test.go +25 −0 Original line number Diff line number Diff line package concurrency import ( "reflect" "testing" ) func TestAnything(t *testing.T) { } func TestBasic(t *testing.T) { done := make(chan bool) go func(done chan bool) { t.Log("Hello from goroutine.") done <- true }(done) <-done t.Log("goroutine is done.") } func TestSequence(t *testing.T) { l0 := []int{1, 1, 1, 1, 1} if r := SequenceOf(1).Take(5); reflect.DeepEqual(r, l0) { t.Errorf("SequenceOf(1).Take(5) is %v, expected %v", r, l0) } //for _, tv := range []struct { // //} }