goscript-engine 0.1.0

goscript engine
Documentation
package main

import "fmt"

func fibonacci(c, quit chan int) {
	x, y := 0, 1
	var s = make([]int, 2)
	for {
		select {
		case c <- x:
			x, y = y, x+y
		case s[0] = <-quit:
			assert(s[0] == 999)
			fmt.Println("quit 拉", s)
			return
		}
	}
}

func main() {
	c := make(chan int)
	quit := make(chan int)
	go func() {
		for i := 0; i < 12; i++ {
			fmt.Println(<-c)
		}
		quit <- 999
	}()
	
	fibonacci(c, quit)


	var f = false

	go func() {
		quit <- 888
	}()

	select {
	case v, ok := <- c:
		assert(f)
		fmt.Println("c recv:", v, ok)
	case v, ok := <-quit:
		assert(v == 888)
		assert(ok)
		fmt.Println("quit recv:", v, ok)
	}	

	go func() {
		close(c)
	}()

	select {
	case v, ok := <- c:
		assert(v == 0)
		assert(!ok)
		fmt.Println("c recv:", v, ok)
		break
		assert(f)
	case v, ok := <-quit:
		assert(f)
		fmt.Println("222 quit recv:", v, ok)

	}	
}