コアサーバーV2プランご契約でドメイン更新費用が永久無料
�o�����[�h���C��

表紙 編集 差分 一覧 最近 短縮 付箋 ログイン 凍結中

/Go言語学習帳/09_FizzBuzz の差分

N2Wiki > Go言語学習帳 > 09_FizzBuzz
ページに戻る
- #start
+ #start FizzBuzz
  #?anch -e
- **** 内容が未設定のページです
- ブラウザの「戻る」で前のページに戻ってください。
- または[[編集|EDIT]]のリンクをクリックして内容を入力してください。
+ package main
+ import "fmt"
+ 
+ func natsGen() chan int {
+     ch := make(chan int);
+     go func() {
+         for i := 1; ; i++ {
+             ch <- i
+         }
+     }();
+     return ch;
+ }
+ 
+ func fizzGen() chan string {
+     ch := make(chan string);
+     go func() {
+         for {
+             ch <- "";
+             ch <- "";
+             ch <- "Fizz";
+         }
+     }();
+     return ch;
+ }
+ 
+ func buzzGen() chan string {
+     ch := make(chan string);
+     go func() {
+         for {
+             ch <- "";
+             ch <- "";
+             ch <- "";
+             ch <- "";
+             ch <- "Buzz";
+         }
+     }();
+     return ch;
+ }
+ 
+ func fizzBuzz() chan string {
+     out := make(chan string);
+     go func() {
+         nats := natsGen();
+         fizz := fizzGen();
+         buzz := buzzGen();
+         for {
+             n := <- nats;
+             f := <- fizz;
+             b := <- buzz;
+             if f != "" || b != "" {
+                 out <- f + b;
+             }
+             else {
+                 out <- fmt.Sprintf("%d", n);
+             }
+         }
+     }();
+     return out;
+ }
+ 
+ func main() {
+     fizzbuzz := fizzBuzz();
+     for i := 1 ; i <= 30 ; i++ {
+         fmt.Println(<-fizzbuzz);
+     }
+ }
  #end
»