Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
今更始めるGo言語 / techcamp04
Search
Yuichi Goto
January 24, 2018
Programming
0
3k
今更始めるGo言語 / techcamp04
第4回開発合宿(2017/01/24)
Yuichi Goto
January 24, 2018
Tweet
Share
More Decks by Yuichi Goto
See All by Yuichi Goto
[Teaser] Type-Safe Lightweight DDD with Effect Schema
yasaichi
1
110
Google Cloud を用いたソフトウェア開発の内製化組織の早期立ち上げの実現 / Rapid Establishment of In-House Software Development Teams Using Google Cloud
yasaichi
1
860
[EN] Robust and Scalable API Gateway Built on Effect
yasaichi
3
240
Effectで作る堅牢でスケーラブルなAPIゲートウェイ / Robust and Scalable API Gateway Built on Effect
yasaichi
8
1.8k
あるRailsエンジニアがビジネスリーダーに転身するまで
yasaichi
8
2.8k
Active Recordから考える次の10年を見据えた技術選定 / Architecture decision for the next 10 years at PIXTA
yasaichi
50
21k
Active Recordから考える次世代のRuby on Railsの方向性 / Directions for the next generation of Ruby on Rails: From the viewpoint of its Active Record
yasaichi
38
20k
ピクスタのエンジニアリングとCircleCI / Software Engineering with CircleCI at PIXTA
yasaichi
1
390
Ruby on Railsの正体と向き合い方 / What is Ruby on Rails and how to deal with it?
yasaichi
143
90k
Other Decks in Programming
See All in Programming
Django NinjaによるAPI開発の効率化とリプレースの実践
kashewnuts
1
150
『品質』という言葉が嫌いな理由
korimu
0
180
Flutter × Firebase Genkit で加速する生成 AI アプリ開発
coborinai
0
160
プログラミング言語学習のススメ / why-do-i-learn-programming-language
yashi8484
0
140
ML.NETで始める機械学習
ymd65536
0
210
なぜイベント駆動が必要なのか - CQRS/ESで解く複雑系システムの課題 -
j5ik2o
12
4.4k
1年目の私に伝えたい!テストコードを怖がらなくなるためのヒント/Tips for not being afraid of test code
push_gawa
1
390
Spring gRPC について / About Spring gRPC
mackey0225
0
230
Kubernetes History Inspector(KHI)を触ってみた
bells17
0
230
Djangoアプリケーション 運用のリアル 〜問題発生から可視化、最適化への道〜 #pyconshizu
kashewnuts
1
250
第3回 Snowflake 中部ユーザ会- dbt × Snowflake ハンズオン
hoto17296
4
380
DRFを少しずつ オニオンアーキテクチャに寄せていく DjangoCongress JP 2025
nealle
2
180
Featured
See All Featured
The Cult of Friendly URLs
andyhume
78
6.2k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.3k
Producing Creativity
orderedlist
PRO
344
39k
For a Future-Friendly Web
brad_frost
176
9.5k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Gamification - CAS2011
davidbonilla
80
5.1k
Optimising Largest Contentful Paint
csswizardry
34
3.1k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
VelocityConf: Rendering Performance Case Studies
addyosmani
328
24k
How GitHub (no longer) Works
holman
314
140k
KATA
mclloyd
29
14k
Why Our Code Smells
bkeepers
PRO
336
57k
Transcript
今更始めるGo言語 Yuichi Goto (@_yasaichi) Jan 21, 2018 @ 第4回開発合宿成果発表
Agenda 背景と目的 技術概要 やったこと 所感 2
http://web-salad.hateblo.jp/entry/2018/01/15/090000 3 先日、こんなエントリを書きました
サーバーサイド開発で利用される言語のマトリックス(前述のエントリより) 4
背景1: 技術検証 • 最近考えているテーマ: モノリシックなRailsアプリ ケーションの刷新時にどの言語を選択すべきか? • 型と並行計算モデルの有無の2軸で捉えてみた • この観点においてはGoかScalaという結論に
• 判断精度向上のためにGo(未経験)を触ってみよう 5
背景2: 自身のスキル開発 • クライアントサイド: React, React Native(第3回) • サーバーサイド •
爆速モノリシック: Ruby on Rails • BFF: Node.js • マイクロサービス: ? 6 ここに当てはまる言語・フレーム ワークを抑えたい
今回の目的: 今更始めるGo言語 • 合宿で明らかにしたかったこと • 言語自体の手触りはどんな感じ? • IDEなどの周辺環境はどんな感じ? • 最終的に明らかにしたいこと
• APIサーバーを書くとしたらどんな感じ? 7
Agenda ɹ 背景と目的 技術概要 やったこと 所感 8
Go #とは • Googleが開発したプログラミング言語 • 2009年11月に公開され、最新バージョンは1.9.2 • 静的型付け • goroutineによる並行計算のサポート
• クロスコンパイルのサポート 9
サンプル: Hello, World! package main import ( "fmt" ) func
main() { fmt.Println("Hello, World!") } 10 $ go run main.go Hello, World!
Agenda ɹ 背景と目的 ɹ 技術概要 やったこと 所感 11
そうだ REPL、作ろう • REPL(Read-Eval-Print-Loop)とは • 対話型評価環境のこと、RubyでいうIRB • Goでは • 言語標準のREPLは存在しない(!)
• 数ある実装の中では motemen/gore が人気 12
デモ 13
デモでは見せませんでしたが… • 式の評価とPrettyprintしか実装できてません • 後者は k0kubun/pp を利用しているので、実質 式の評価しか実装してません • わかってはいたが、やはり題材が難しかった
• @motemen さんはすごい人(小並感) 14
仕組み • goreとだいたい同じ 1. 入力された式を評価して標準出力に表示する 一時的なソースコードを生成する 2. 1を go run
で実行して得られた結果を返す 3. 1-2をユーザーが中断するまで繰り返し 15 ここが難しいところで、具体的には AST周りをわかっていないとダメ
Agenda ɹ 背景と目的 ɹ 技術概要 ɹ やったこと 所感 16
良かったところ • 言語の手触り: 21世紀のC言語 or Better C • 言語仕様が小さくキャッチアップがしやすい •
↑とgofmtにより誰が書いても同じ感じになる • IDEなどの周辺環境: ポータブル • 標準ツールが充実しており、エディタを選ばない 17
苦しかったところ • 言語仕様の小ささや引き算の負の側面 • 例1: 例外がないので、 foo, err = …;
if err != nil のようなコードを至るところで書くことになる • 例2: mapのような高階関数がないのでfor文を 使うしかなく、愚直なコードになりがち ※ 始めたばかりなので慣れてきたらまた変わるかも 18
お疲れさまでした! 成果物: https://github.com/yasaichi-sandbox/cheney 19