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
O’ReillyでGo言語入門
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
nsym-m
February 20, 2022
Programming
0
130
O’ReillyでGo言語入門
O’Reillyの「Go言語によるWebアプリケーション開発」でGo言語の勉強をしたのでそれで学んだことをざっくり共有する資料です。
nsym-m
February 20, 2022
Tweet
Share
More Decks by nsym-m
See All by nsym-m
Flutter入門してみた
nsym
0
110
5分でTypeScript入門!〜既存JS環境に引導を渡そう〜
nsym
0
35
Other Decks in Programming
See All in Programming
CDIの誤解しがちな仕様とその対処TIPS
futokiyo
0
220
Go 1.26でのsliceのメモリアロケーション最適化 / Go 1.26 リリースパーティ #go126party
mazrean
1
420
RAGでハマりがちな"Excelの罠"を、データの構造化で突破する
harumiweb
9
2.9k
ふつうのRubyist、ちいさなデバイス、大きな一年 / Ordinary Rubyists, Tiny Devices, Big Year
chobishiba
1
470
Claude Code の Skill で複雑な既存仕様をすっきり整理しよう
yuichirokato
1
410
Angular-Apps smarter machen mit Gen AI: Lokal und offlinefähig - Hands-on Workshop!
christianliebel
PRO
0
120
AI時代のシステム設計:ドメインモデルで変更しやすさを守る設計戦略
masuda220
PRO
5
1.1k
Claude Code Skill入門
mayahoney
0
400
エンジニアの「手元の自動化」を加速するn8n 2026.02.27
symy2co
0
160
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
400
AI Assistants for Your Angular Solutions
manfredsteyer
PRO
0
140
RubyとGoでゼロから作る証券システム: 高信頼性が求められるシステムのコードの外側にある設計と運用のリアル
free_world21
0
310
Featured
See All Featured
Color Theory Basics | Prateek | Gurzu
gurzu
0
250
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
220
Imperfection Machines: The Place of Print at Facebook
scottboms
269
14k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
250
We Are The Robots
honzajavorek
0
200
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
350
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.1k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
130
Designing for humans not robots
tammielis
254
26k
Thoughts on Productivity
jonyablonski
75
5.1k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
190
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Transcript
O’ReillyでGo言語入門
自己紹介 名前:にしやま 使用言語:PHP(Laravel, CakePHP) / JavaScript(Vue.js) / Swift / Go←new!
IT業界歴:2年半くらい 職業:受託開発、来月から事業会社 趣味:犬と猫とアニメ
今回の趣旨 O’Reillyの「Go言語によりWebアプリケーション開発」(*1)でGo言語入門中なので、 その過程で学んだことを共有する為の LTです。 その為、本の内容に沿って学んだことをざっくり解説していきます。 ※第一章「WebSocketを使ったチャットアプリケーション」の一部抜粋のみ ここに載ってるソースコードの内容は私の Github(*2)にあります。本家のソースコードも別 (*3)にあります。 *1
https://www.amazon.co.jp/dp/4873117526/ *2 https://github.com/nsym-m/go-programming-blueprints/tree/main/chat *3 https://github.com/oreilly-japan/go-programming-blueprints/tree/master/chapter1/chat
まず、Go言語とは • Googleの開発した言語 • 静的型付言語 • Webの世界だとフロントにJsonを返すWebAPIとしてよく使われる • 並行処理が得意らしい •
クラスはなくて代わりに構造体がある
動作環境 Windows 10 Pro 今回の内容であれば同じバージョンの Goが入っていれば MacでもLinuxでも大きくは変わらないと思います。 PS C:\go-programming-blueprints> go
version go version go1.17.7 windows/amd64
WebSocketを使ったチャット アプリケーション
要件 • シンプルなWebSocketによるリアルタイムチャットができる Webアプリ • チャットの内容はDBに保存しない • ユーザーの区別もしない • 「ユーザーがメッセージ送信→リアルタイムで自他ユーザーの画面にメッセージが表
示される」だけの機能
疑問1:WebSocketとは? • HTTPをラップしたプロトコルの1つ • HTTPで双方向通信を実現する為の仕組み • HTTPではクライアントサイド→サーバーサイドの方向でしか通信を発火できない ◦ サーバーサイドから任意のタイミングで通信を行うことができない •
双方向からリアルタイムに通信を行うことができるようにする • チャットでよく使われるイメージ ◦ 例:ユーザーAがグループチャットに送信 →WebSocketのサーバー→全グループメンバーにリ アルタイムでメッセージが表示される • 詳しく知りたい方は”websocket とは”とかで検索してみてください
main.go 何をしている? • Webサーバーの準備/起動 ◦ テンプレートファイルの呼び出 し ◦ ルーティングの定義 ◦
指定ポートでのWebサーバー の起動 • チャットのリクエスト処理をバックグラウ ンドで走らせる ◦ “go”を手前につけることで並列処 理を走らせることができる
room.go(1) 何をしている? • roomに必要なモデルの定義 • main.goのr.run()の定義 ◦ 参加、退室、メッセージ送信それぞ れのイベントの際に実行する内容を 定義している
room.go(2) 何をしている? • WebSocketのサーバーの定義 ◦ main.goのServeHTTPを上書き している • チャットルームの生成準備
client.go 何をしている? • clientに必要なモデルの 定義 • ユーザーごとにメッセージ の書き込みと読み込みの 処理を定義
実行! ブラウザでhttp://localhost:8888を開く PS C:\go-programming-blueprints\chat> go run . -addr=":8888" 2022/02/20 15:13:24
Webサーバーを起動します。ポート : :8888
確認!(1) ↓
確認!(2) ↓(送信したメッセージがリアルタイムで複数のタブに反映されている)
おしまい ご清聴ありがとうございました!