今更始めるGo言語 / techcamp04
by
Yuichi Goto
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
今更始めるGo言語 Yuichi Goto (@_yasaichi) Jan 21, 2018 @ 第4回開発合宿成果発表
Slide 2
Slide 2 text
Agenda 背景と目的 技術概要 やったこと 所感 2
Slide 3
Slide 3 text
http://web-salad.hateblo.jp/entry/2018/01/15/090000 3 先日、こんなエントリを書きました
Slide 4
Slide 4 text
サーバーサイド開発で利用される言語のマトリックス(前述のエントリより) 4
Slide 5
Slide 5 text
背景1: 技術検証 • 最近考えているテーマ: モノリシックなRailsアプリ ケーションの刷新時にどの言語を選択すべきか? • 型と並行計算モデルの有無の2軸で捉えてみた • この観点においてはGoかScalaという結論に • 判断精度向上のためにGo(未経験)を触ってみよう 5
Slide 6
Slide 6 text
背景2: 自身のスキル開発 • クライアントサイド: React, React Native(第3回) • サーバーサイド • 爆速モノリシック: Ruby on Rails • BFF: Node.js • マイクロサービス: ? 6 ここに当てはまる言語・フレーム ワークを抑えたい
Slide 7
Slide 7 text
今回の目的: 今更始めるGo言語 • 合宿で明らかにしたかったこと • 言語自体の手触りはどんな感じ? • IDEなどの周辺環境はどんな感じ? • 最終的に明らかにしたいこと • APIサーバーを書くとしたらどんな感じ? 7
Slide 8
Slide 8 text
Agenda ɹ 背景と目的 技術概要 やったこと 所感 8
Slide 9
Slide 9 text
Go #とは • Googleが開発したプログラミング言語 • 2009年11月に公開され、最新バージョンは1.9.2 • 静的型付け • goroutineによる並行計算のサポート • クロスコンパイルのサポート 9
Slide 10
Slide 10 text
サンプル: Hello, World! package main import ( "fmt" ) func main() { fmt.Println("Hello, World!") } 10 $ go run main.go Hello, World!
Slide 11
Slide 11 text
Agenda ɹ 背景と目的 ɹ 技術概要 やったこと 所感 11
Slide 12
Slide 12 text
そうだ REPL、作ろう • REPL(Read-Eval-Print-Loop)とは • 対話型評価環境のこと、RubyでいうIRB • Goでは • 言語標準のREPLは存在しない(!) • 数ある実装の中では motemen/gore が人気 12
Slide 13
Slide 13 text
デモ 13
Slide 14
Slide 14 text
デモでは見せませんでしたが… • 式の評価とPrettyprintしか実装できてません • 後者は k0kubun/pp を利用しているので、実質 式の評価しか実装してません • わかってはいたが、やはり題材が難しかった • @motemen さんはすごい人(小並感) 14
Slide 15
Slide 15 text
仕組み • goreとだいたい同じ 1. 入力された式を評価して標準出力に表示する 一時的なソースコードを生成する 2. 1を go run で実行して得られた結果を返す 3. 1-2をユーザーが中断するまで繰り返し 15 ここが難しいところで、具体的には AST周りをわかっていないとダメ
Slide 16
Slide 16 text
Agenda ɹ 背景と目的 ɹ 技術概要 ɹ やったこと 所感 16
Slide 17
Slide 17 text
良かったところ • 言語の手触り: 21世紀のC言語 or Better C • 言語仕様が小さくキャッチアップがしやすい • ↑とgofmtにより誰が書いても同じ感じになる • IDEなどの周辺環境: ポータブル • 標準ツールが充実しており、エディタを選ばない 17
Slide 18
Slide 18 text
苦しかったところ • 言語仕様の小ささや引き算の負の側面 • 例1: 例外がないので、 foo, err = …; if err != nil のようなコードを至るところで書くことになる • 例2: mapのような高階関数がないのでfor文を 使うしかなく、愚直なコードになりがち ※ 始めたばかりなので慣れてきたらまた変わるかも 18
Slide 19
Slide 19 text
お疲れさまでした! 成果物: https://github.com/yasaichi-sandbox/cheney 19