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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
OCaml 5でモダンな並列プログラミングを Enjoyしよう!
haochenx
0
140
例外処理とどう使い分ける?Result型を使ったエラー設計 #burikaigi
kajitack
16
6.1k
開発者から情シスまで - 多様なユーザー層に届けるAPI提供戦略 / Postman API Night Okinawa 2026 Winter
tasshi
0
210
Basic Architectures
denyspoltorak
0
680
要求定義・仕様記述・設計・検証の手引き - 理論から学ぶ明確で統一された成果物定義
orgachem
PRO
1
170
AI時代のキャリアプラン「技術の引力」からの脱出と「問い」へのいざない / tech-gravity
minodriven
21
7.4k
15年続くIoTサービスのSREエンジニアが挑む分散トレーシング導入
melonps
2
220
AWS re:Invent 2025参加 直前 Seattle-Tacoma Airport(SEA)におけるハードウェア紛失インシデントLT
tetutetu214
2
120
Best-Practices-for-Cortex-Analyst-and-AI-Agent
ryotaroikeda
1
110
Rust 製のコードエディタ “Zed” を使ってみた
nearme_tech
PRO
0
200
IFSによる形状設計/デモシーンの魅力 @ 慶應大学SFC
gam0022
1
310
プロダクトオーナーから見たSOC2 _SOC2ゆるミートアップ#2
kekekenta
0
220
Featured
See All Featured
Mind Mapping
helmedeiros
PRO
0
89
Building AI with AI
inesmontani
PRO
1
700
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.3k
Darren the Foodie - Storyboard
khoart
PRO
2
2.4k
Thoughts on Productivity
jonyablonski
74
5k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
62
50k
Become a Pro
speakerdeck
PRO
31
5.8k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.1k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
120
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.1k
Automating Front-end Workflow
addyosmani
1371
200k
Designing for Timeless Needs
cassininazir
0
130
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) ↓(送信したメッセージがリアルタイムで複数のタブに反映されている)
おしまい ご清聴ありがとうございました!