Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
O’ReillyでGo言語入門
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
nsym-m
February 20, 2022
Programming
140
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
O’ReillyでGo言語入門
O’Reillyの「Go言語によるWebアプリケーション開発」でGo言語の勉強をしたのでそれで学んだことをざっくり共有する資料です。
nsym-m
February 20, 2022
Transcript
16 slides
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) ↓(送信したメッセージがリアルタイムで複数のタブに反映されている)
おしまい ご清聴ありがとうございました!
More Decks by nsym-m
See All by nsym-m
Flutter入門してみた
nsym
0
130
5分でTypeScript入門!〜既存JS環境に引導を渡そう〜
nsym
0
44
Other Decks in Programming
See All in Programming
Performance Optimization With LLMs
xleitix
0
260
例外からRich Errorsまで Kotlinエラーハンドリングの進化を読み解く
shiita0903
0
130
学びを記事・スライド・Xへ高速展開する― AI-assisted Learning Loopで回すコンテンツ生成術
ochtum
0
210
そのデザイントークン、Flutterでも同じ見た目になりますか?
nakamizu
0
340
Python Lambdaにおけるテストしやすい設計とAI支援の活用 / Designing Testable Python Lambda Functions with AI
kitano_yuichi
1
330
선언형 햅틱 라이브러리 진동을 소개합니다
l2hyunwoo
1
310
SFCで実現する病院・医療システムの動的組み立て式UI
koukimiura
1
180
PyConTW 2026 - AI Coding 不只是工具升級, 區域醫院醫療資訊系統協作開發與資訊團隊轉型實踐
cclai999
0
250
Engineering Biometric UX Across Android Versions | DroidKnights 2026
ryunen344
1
200
小さなアプリを作って公開するまで
onozaty
0
170
AI時代のシニアエンジニアとは
yosuke_furukawa
PRO
15
12k
Seven New Principles of Software Engineering
yegor256
0
490
Featured
See All Featured
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
610
Documentation Writing (for coders)
carmenintech
77
5.6k
Agile that works and the tools we love
rasmusluckow
331
22k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
660
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.8k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.9k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
480
Speed Design
sergeychernyshev
33
2.2k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.4k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
330
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
23k
Test your architecture with Archunit
thirion
2
2.5k