Upgrade to Pro — share decks privately, control downloads, hide ads and more …

今更始めるGo言語 / techcamp04

Yuichi Goto
January 24, 2018

今更始めるGo言語 / techcamp04

第4回開発合宿(2017/01/24)

Yuichi Goto

January 24, 2018
Tweet

More Decks by Yuichi Goto

Other Decks in Programming

Transcript

  1. 今更始めるGo言語
    Yuichi Goto (@_yasaichi)
    Jan 21, 2018 @ 第4回開発合宿成果発表

    View full-size slide

  2. Agenda
    背景と目的
      技術概要
      やったこと
      所感
    2

    View full-size slide

  3. http://web-salad.hateblo.jp/entry/2018/01/15/090000 3
    先日、こんなエントリを書きました

    View full-size slide

  4. サーバーサイド開発で利用される言語のマトリックス(前述のエントリより) 4

    View full-size slide

  5. 背景1: 技術検証
    • 最近考えているテーマ: モノリシックなRailsアプリ
    ケーションの刷新時にどの言語を選択すべきか?
    • 型と並行計算モデルの有無の2軸で捉えてみた
    • この観点においてはGoかScalaという結論に
    • 判断精度向上のためにGo(未経験)を触ってみよう
    5

    View full-size slide

  6. 背景2: 自身のスキル開発
    • クライアントサイド: React, React Native(第3回)
    • サーバーサイド
    • 爆速モノリシック: Ruby on Rails
    • BFF: Node.js
    • マイクロサービス: ?
    6
    ここに当てはまる言語・フレーム
    ワークを抑えたい

    View full-size slide

  7. 今回の目的: 今更始めるGo言語
    • 合宿で明らかにしたかったこと
    • 言語自体の手触りはどんな感じ?
    • IDEなどの周辺環境はどんな感じ?
    • 最終的に明らかにしたいこと
    • APIサーバーを書くとしたらどんな感じ?
    7

    View full-size slide

  8. Agenda
    ɹ 背景と目的
    技術概要
      やったこと
      所感
    8

    View full-size slide

  9. Go #とは
    • Googleが開発したプログラミング言語
    • 2009年11月に公開され、最新バージョンは1.9.2
    • 静的型付け
    • goroutineによる並行計算のサポート
    • クロスコンパイルのサポート
    9

    View full-size slide

  10. サンプル: Hello, World!
    package main
    import (
    "fmt"
    )
    func main() {
    fmt.Println("Hello, World!")
    }
    10
    $ go run main.go
    Hello, World!

    View full-size slide

  11. Agenda
    ɹ 背景と目的
    ɹ 技術概要
    やったこと
      所感
    11

    View full-size slide

  12. そうだ REPL、作ろう
    • REPL(Read-Eval-Print-Loop)とは
    • 対話型評価環境のこと、RubyでいうIRB
    • Goでは
    • 言語標準のREPLは存在しない(!)
    • 数ある実装の中では motemen/gore が人気
    12

    View full-size slide

  13. デモでは見せませんでしたが…
    • 式の評価とPrettyprintしか実装できてません
    • 後者は k0kubun/pp を利用しているので、実質

    式の評価しか実装してません
    • わかってはいたが、やはり題材が難しかった
    • @motemen さんはすごい人(小並感)
    14

    View full-size slide

  14. 仕組み
    • goreとだいたい同じ
    1. 入力された式を評価して標準出力に表示する

    一時的なソースコードを生成する
    2. 1を go run で実行して得られた結果を返す
    3. 1-2をユーザーが中断するまで繰り返し
    15
    ここが難しいところで、具体的には
    AST周りをわかっていないとダメ

    View full-size slide

  15. Agenda
    ɹ 背景と目的
    ɹ 技術概要
    ɹ やったこと
    所感
    16

    View full-size slide

  16. 良かったところ
    • 言語の手触り: 21世紀のC言語 or Better C
    • 言語仕様が小さくキャッチアップがしやすい
    • ↑とgofmtにより誰が書いても同じ感じになる
    • IDEなどの周辺環境: ポータブル
    • 標準ツールが充実しており、エディタを選ばない
    17

    View full-size slide

  17. 苦しかったところ
    • 言語仕様の小ささや引き算の負の側面
    • 例1: 例外がないので、 foo, err = …; if err !=
    nil のようなコードを至るところで書くことになる
    • 例2: mapのような高階関数がないのでfor文を

    使うしかなく、愚直なコードになりがち
    ※ 始めたばかりなので慣れてきたらまた変わるかも
    18

    View full-size slide

  18. お疲れさまでした!
    成果物: https://github.com/yasaichi-sandbox/cheney
    19

    View full-size slide