Slide 1

Slide 1 text

初めてGoで開発して 思ったこと golang.tokyo #28 Ryuichi KAWAMATA @rkmathi

Slide 2

Slide 2 text

アジェンダ ● 自己紹介 ● 業務でGoを使うためにやったこと ● 初めてGoで開発して思ったこと

Slide 3

Slide 3 text

自己紹介 ● Ryuichi KAWAMATA ○ @rkmathi ● 今までやってきたこと ○ 2015年6月〜: モバイルゲームのサーバサイド開発 ■ ほとんど Ruby (Sinatra, Rails) ○ 2016年12月〜: モバイルゲームのリアルタイム通信サーバ・クライアント SDK開発 ■ ほとんど C++ ○ 2019年4月〜: サーバサイド開発 ■ 全部 Ruby (Rails)

Slide 4

Slide 4 text

自己紹介 ● Ryuichi KAWAMATA ○ @rkmathi ● 今までやってきたこと ○ 2015年6月〜: モバイルゲームのサーバサイド開発 ■ ほとんど Ruby (Sinatra, Rails) ○ 2016年12月〜: モバイルゲームのリアルタイム通信サーバ・クライアント SDK開発 ■ ほとんど C++ ○ 2019年4月〜: サーバサイド開発 ■ 全部 Ruby (Rails) ○ 2019年9月〜: サーバサイド開発 ■ Go

Slide 5

Slide 5 text

初めてのGo!

Slide 6

Slide 6 text

何から始めよう?

Slide 7

Slide 7 text

業務でGoを使うためにやったこと - まずは公式が提供している資料を読んでみるか - A Tour of Go : https://go-tour-jp.appspot.com/ - How to Write Go Code : https://golang.org/doc/code.html - Effective Go : https://golang.org/doc/effective_go.html - The Go Programming Language Specification https://golang.org/ref/spec - などなど...

Slide 8

Slide 8 text

言語仕様や書き方は 分かったつもりになったが、 実際のアプリケーションは どう書くのだろうか...

Slide 9

Slide 9 text

Gopher道場

Slide 10

Slide 10 text

Gopher道場 - 4週間、約2-3時間ずつ座学での講義 - 基本構文から、パッケージ、抽象化、テスタビリティ、ゴルーチン・チャネル、などなど … - tenntennさんの資料・講義内容が分かりやすい! - 直接質問させていただけるのもありがたかったです。 - + 宿題でガッツリGoのコードを書く練習ができる - 他の人の課題のコードレビューの様子が見えるので、それも勉強になる

Slide 11

Slide 11 text

Gopher道場 - 最終日は受講生によるLT大会 - oaas (Omikuji As A Service) というネタマイクローサビス (?)を作ってみました

Slide 12

Slide 12 text

Gopher道場 - Goが初めてだった自分からすると、とても勉強になりました!! - (雑ですが、)「あのソースコードのこの部分はそういう理由でこう書いていたのか」のような感覚が ちょっとずつ身についてきた気がします。 - この会に参加される方はすでに Goをバリバリ使っているかもですが、、、 まだ参加していないなら、ぜひ参加されることをオススメします!!

Slide 13

Slide 13 text

初めてGoで開発して思ったこと - 今まではC++とRubyがメインでした - 言語そのものを貶める意図は全く無いです

Slide 14

Slide 14 text

初めてGoで開発して思ったこと - C++と比べて - 部分的な動作を確かめたくて、一部分をコメントアウトすると、 unused variable, unused importエラーが出ちゃう - 同じような処理を、異なる型に対して実行したいようなときに、 関数の引数・戻り値の型だけを直してコピペするのが面倒だった - 途中からは、一部を自動生成するようにしました - Go2のcontractsで楽になるのかも!? - (開発物の規模が違いますがそれでも)コンパイルが速いように感じる - C++ではCMakeを使ってて、Goはビルド設定をMakefileで書くの!? と最初は思ってしまったが、実際書いてみると記述量はかなり少なく 済むし、パッケージ管理がとても楽だった - 並行処理を書くときに、std::threadよりもgoroutineが簡単だった

Slide 15

Slide 15 text

初めてGoで開発して思ったこと - Rubyと比べて - JSONを扱うときに、structにマッピングする作業が大変 - JSONデータそのものがあれば、 JSON-to-Goのようなツールで楽できそうだが、 仕様(not JSON schema)だけがあると難しそうだった、、、 - 記述量がどうしても多くなっちゃう - (今のところ)rubocopのようなlinterツールの設定をいじる必要がなく、 標準のgofmt, goimportsで十分 - 実行することなく、コンパイルの時点でtypoや明らかなエラーに 気づけるのが嬉しい