「ごもく会 #2」で gin と blink(1) を組み合わせてライトを点灯させた

昨日は「ごもく会 #2」に参加してきた!1日遅れたけどレポートを書いている.

前回と似たような構成で,もくもく課題が出題されたり,Interface の解説をしてくれたり,ライブコーディングで API を実装するのを見せてくれたりして,単純なもくもく会とは違った学びがあるのが特徴だと思う.気軽に質問できるところも良くて,Go ビギナーの僕でも凄く楽しめる勉強会でオススメ!

eure.connpass.com

もくもく課題

今回は2問出題された.

  • for 文を使って図形を出力する
   *
  ***
 *****
*******
 *****
  ***
   *
  • 1-100までの整数の中から素数のみを出力する

課題1

良さそうなロジックを考えられなくて,微妙な実装になってしまった.戦略としては上下の段で for を分離して,さらに中心点までの空白数を計算して出力している.エウレカ社員の人が解説してた回答はある意味振り切っていて面白かったけど,ちゃんとテストコードを書いているところは素晴らしいなと思った.日頃からテストファーストの意識があるんだろうなーという雰囲気が伺えた.

package main

import (
    "fmt"
    "strings"
)

// 中心点を定義する
var center = 4

func main() {
    // 上4段
    for i := 1; i <= 7; i++ {
        if i%2 == 1 {
            // 奇数
            outLine(i)
        }
    }

    // 下3段
    for i := 5; i >= 1; i-- {
        if i%2 == 1 {
            // 奇数
            outLine(i)
        }
    }
}

func outLine(i int) {
    // 中心点までの空白の数と出力文字の数を計算して出力する
    fmt.Printf("%s%s\n", strings.Repeat(" ", center-i/2), strings.Repeat("*", i))
}

課題2

課題2はパスした.

もくもく : gin + blink(1)

gin を試してみたいなと思っていたので,gin-gonic/gin: Gin is a HTTP web framework ... - GitHubblink(1) を組み合わせて API からライトを点灯させるコードを書いていた.XDF になるかなーと考えて,具体的に以下のエンドポイントを実装した.

エンドポイント 概要
/ping gin 動作確認用
/colors 点灯できる色一覧を返す
/colors/red 赤で点灯
/colors/green 緑で点灯
/colors/blue 青で点灯
/colors/orange オレンジで点灯
/colors/purple 紫で点灯

動かしてみた

/colors/red をブラウザから叩くと写真のようにライトが赤く点灯する.HTTP のレスポンスで「200 なら緑」「500 なら赤」など実装するとより XFD っぽくなりそう.

f:id:kakku22:20160119194747j:plain

gin_blink1.go

ザッと書いた gin + blink(1) のコードは playground に push しておいた.

Interface 解説

@MakoTano さんから Interface の解説があって勉強になった.Interface も type の一種だと考えると良いとのことだった.個人的にはダックタイピング的なイメージを持っていたけど,実際に Interface を使ったコードを書けって言われると書けないし,勉強不足を痛感した.Go in Action を読んで勉強するぞ!

speakerdeck.com

direnv

direnv/direnv: Unclutter your .profile - GitHub を使うと rbenv のように複数バージョンの Go を切り替えられるらしい.

まとめ

今回も面白かった!開催ありがとうございます.

皆勤賞目指して次回も参加予定で,次回は LT 枠もあるらしく kakakakakku/togoo - Go - GitHub の紹介をしようかなと考え中!

eure.connpass.com

関連記事