チャネルを用いた計算

Goを使って普通なプログラムを書くべきで、ただ私みたいなうんこ野郎にはそんな事は出来ないというか、Concurrency使わないんだったらC++使うっていうそれなので、なんとかしてConcurrencyを使わなければ成りません。

プログラムを書くといえば何か動くべきなので、ライフゲームを作ってみたのですが、channelを使ったライフゲームは意味も無く座標上の関係をソコに移して来ただけで悲しい。
(ただその過程でcgoの使い方が分かったので、gocursesパッケージを作る事は出来ました。)

特に何もないならチャネルを積極的に使おうという縛りを入れて階乗計算をやってみました

//cat channel_fact.go
package main

import "fmt"

func p(v ...) { fmt.Println(v); }

func Para(a func (),b func ()) {
	go a();
	go b();
}

func fact(n int,r chan int) {
	if n == 0 {
		r <- 1;
	}
	else {
		c := make(chan int);
		Para(
			func () {
			fact(n-1,c);//こいつもチャネルに変える
		},
			func () {
			x := <- c;
			r <- (n * x);
		});
	}
}
			

func main(){
	ret := make(chan int);
	fact(10,ret);
	v := <- ret;
	p(v);
}

3628800

続かない