kakakakakku blog

Weekly Tech Blog: Keep on Learning!

「ごもく会 #1」でもくもくしてきた

f:id:kakku22:20151222001403p:plain

今日は「ごもく会 #1」に参加して Go でもくもくしてきた!単にもくもくするだけじゃなくて,エウレカ社のエンジニア(先生)に自由に質問ができたり,Go のライブコーディングが見れたりもして楽しかった.初心者だからライブコーディングは勉強になった!よし次回も参加するぞ!

僕は A Tour of Go がまだ終わってなくて,最後の Concurrency をもくもくしようと思ってたんだけど,ごもく会で出題された「もくもく課題」が楽しそうだったので挑戦してたら A Tour of Go が全然進まなかったw

もくもく課題

特にもくもくする内容が決まってない人はどうぞ!っていう感じで「もくもく課題」が3問出題された.参加側としてこういう課題があるのも凄く良かったなと思う.

  1. for 文を使った図形の出力
  2. FizzBuzz
  3. net/http を使った FizzBuzz API の実装

中途半端な感じになってるけど,僕の書いたコードは Kakakakakku/playground に push してある.

課題1

二重ループを回すのも嫌だし,シンプルに書こうと思って strings.Repeat に頼ったコードを書いた.コードを見てもらったら「良いですねー」って言ってもらえて,一瞬スクリーンに表示されたときは緊張したw

package main

import (
    "fmt"
    "strings"
)

//     *
//    **
//   ***
//  ****
// *****
func main() {
    for i := 1; i <= 5; i++ {
        fmt.Printf("%5s\n", strings.Repeat("*", i))
    }
}

課題2

まず単純な FizzBuzz (gomoku-kai-02-1.go) を書いた.これじゃ全然面白く無いなーと思って悩んだけどアイデアが出なかった.苦肉の策で書き殴ったコードが gomoku-kai-02-2.go なんだけど,defer を使って FizzBuzz をスタックして panic を起こしたらトリガーされて表示される感じ.まぁ特に意味はないんだけどw

package main

import (
    "fmt"
    "strconv"
)

func main() {
    loop := 30

    defer func() {
        if r := recover(); r != nil {
            fmt.Println("リカバー!", r)
        }
    }()

    for i := loop; i >= 1; i-- {
        defer fmt.Println(fizzbuzz(i))
    }

    panic("")
}

func fizzbuzz(i int) string {
    if i%3 == 0 && i%5 == 0 {
        return "Fizz Buzz"
    } else if i%3 == 0 {
        return "Fizz"
    } else if i%5 == 0 {
        return "Buzz"
    } else {
        return strconv.Itoa(i)
    }
}

課題3

未完成のままタイムアップになってしまったけど localhost:4000?n=15 のように叩くと FizzBuzz を返すところまでは実装できた.net/http の理解を深めながら Gin などの FW も試してみたいところ.

package main

import (
    "fmt"
    "net/http"
    "strconv"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        n := r.FormValue("n")
        i, _ := strconv.Atoi(n)
        fmt.Fprint(w, fizzbuzz(i))
    })

    http.ListenAndServe("localhost:4000", nil)
}

func fizzbuzz(i int) string {
    if i%3 == 0 && i%5 == 0 {
        return "Fizz Buzz"
    } else if i%3 == 0 {
        return "Fizz"
    } else if i%5 == 0 {
        return "Buzz"
    } else {
        return strconv.Itoa(i)
    }

懇親会

結構少人数だったけど,せっかくの機会だしエウレカ社のエンジニア(先生)とお話させて頂いた.Go で Pairs をフルスクラッチした話はノウハウの宝庫って感じだったし,Golint は必須だよ!って話も今後 Go を採用しようと考えている僕にとっては参考になった.

早く簡単なツールでも作ってみて LT でもしたいなー!とモチベーションが上がった.

まとめ

「ごもく会 #2」に参加する!既に人気だから早めに申し込んだ方が良さそう!

今日はありがとうございました!EUREKAGO ステッカーもイイ!