今更始めるGo言語 / techcamp04
by
Yuichi Goto
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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