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
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
AI Agent 時代的開發者生存指南
eddie
3
1.8k
CSC509 Lecture 05
javiergs
PRO
0
300
品質ワークショップをやってみた
nealle
0
520
Swift Concurrency - 状態監視の罠
objectiveaudio
2
540
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
220
CSC509 Lecture 03
javiergs
PRO
0
340
uniqueパッケージの内部実装を支えるweak pointerの話
magavel
0
1k
私はどうやって技術力を上げたのか
yusukebe
44
19k
TFLintカスタムプラグインで始める Terraformコード品質管理
bells17
2
210
20251016_Rails News ~Rails 8.1の足音を聴く~
morimorihoge
2
480
「ちょっと古いから」って避けてた技術書、今だからこそ読もう
mottyzzz
11
6.8k
タスクの特性や不確実性に応じた最適な作業スタイルの選択(ペアプロ・モブプロ・ソロプロ)と実践 / Optimal Work Style Selection: Pair, Mob, or Solo Programming.
honyanya
3
180
Featured
See All Featured
jQuery: Nuts, Bolts and Bling
dougneiner
65
7.9k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.4k
Music & Morning Musume
bryan
46
6.8k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
KATA
mclloyd
PRO
32
15k
Code Reviewing Like a Champion
maltzj
526
40k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.5k
Reflections from 52 weeks, 52 projects
jeffersonlam
353
21k
Facilitating Awesome Meetings
lara
56
6.6k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.2k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
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) ↓(送信したメッセージがリアルタイムで複数のタブに反映されている)
おしまい ご清聴ありがとうございました!