Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Goでゲームサーバーを実装して考えたこと / game server in go

mizkei
May 14, 2018

Goでゲームサーバーを実装して考えたこと / game server in go

IGDA日本 ゲームサーバ勉強会 #8
https://techplay.jp/event/666753

登壇した資料のようなメモ

mizkei

May 14, 2018
Tweet

More Decks by mizkei

Other Decks in Programming

Transcript

  1. 自己紹介 • 名前 ◦ 水野 敬太 (@mizkei11) • 所属 ◦

    面白法人カヤック • 職種 ◦ サーバーサイドエンジニア
  2. Go

  3. チーム開発におけるGo • 不要な作業の削減 ◦ gofmt, golintによって一つの書き方に収束する • シンプルな文法 ◦ 関数を辿っていけば、大体全部わかる

    ▪ 魔法のような動作はない ▪ GoはGoで書かれているので標準パッケージの中までわかる ◦ ただし、コード量は多くなる
  4. Web Application Framework • GoのWAF ◦ echo (https://github.com/labstack/echo) ◦ Gin

    (https://github.com/gin-gonic/gin) ◦ Goji (https://github.com/zenazn/goji) ◦ ... 他にもたくさん
  5. • ほとんど自動生成 ◦ パスパターン ◦ リクエスト/レスポンスのstruct ◦ リクエストの内容をstructに詰め込む ◦ 値の範囲、文字列の長さ、リストの長さのバリデーション

    • 手で書かないといけない処理 ◦ リクエストのstructの値をモデルのメソッドに値を渡す ◦ モデルのメソッドの返り値をレスポンスのstructに詰め込む ハンドラーの自動生成
  6. DBへのクエリ処理の自動生成 • Primary Key、Uniqueなものはメソッドを用意 ◦ 例)userテーブル: Primary Key id 、Unique

    (name, number) ▪ func (t User) FindByID(id int64) (*row.User, error) ▪ func (t User) FindByNameNumber(name string, number int64) (*row.User, error)
  7. DBへのクエリ処理の自動生成 • eachRowsFast ◦ 条件を満たす全rowを順に処理していくためのメソッド ◦ func([]*row.User) errorみたいなメソッドを渡して、 大量のrowを使った処理などをおこなう •

    selectWithCursorID ◦ 主に管理画面用にカーソルを使ってページングするためのメソッド ◦ 前後ページのIDを返したり、並び替えをおこなう