Slide 1

Slide 1 text

他言語と比較した G o言語の良し悪し及び学習 について 2017/06/23 G eeks W ho D rink in T okyo ‑‑G o G o G olang E dition! 臼井 友亮

Slide 2

Slide 2 text

A bout me { " p r o f i l e " : { " n a m e " : " 臼井 友亮" , " n a m e _ e n " : " Y u s u k e U s u i " , " s i t e " : " h t t p : / / y u 8 1 . g i t h u b . i o / " , " p r o g r a m m i n g _ l a n g u a g e " : [ " G o l a n g " , " P H P " , " S h e l l S c r i p t " , " P y t h o n " , " C # " , " C " , " C + + " , " a n d m o r e . . . " ] , " c a r r e r " : [ " 株式会社システム計画研究所( 2 0 0 8 / 0 4 - 2 0 1 2 / 0 3 ) " , " ハンズラボ株式会社/ 株式会社東急ハンズ( 2 0 1 2 / 0 4 - 2 0 1 6 / 0 5 ) " , " 株式会社エウレカ( 2 0 1 6 / 0 6 - ) " ] } }

Slide 3

Slide 3 text

A genda 発表者のプログラミングバックグラウンド バックグラウンドを踏まえた G o言語所感 初学者の学習方法

Slide 4

Slide 4 text

使用言語に着目したバックグラウンド 学生時代/新卒新人研修 たどたどしい C 言語。 数値計算、 オセロ AI (新卒研修)。 1社目業務 C ++/MFC , C #/WPF , C ++.NET for W indows N at iv e A pps. 2社目業務 EC (W eb/i OS /A ndr oid)及び EC と商品関連システム連携。 シェ ルスクリプトでバッチ・API (本当にシェルでjsonを吐く) PHP で上記システム(主に API )のリプレー ス。 新卒新人研修の初学者教育用言語として P yt honを採用し教 授。

Slide 5

Slide 5 text

シェルスクリプトでバッチ・API (本当にシェ ルでjsonを吐く)

Slide 6

Slide 6 text

この件はまたどこかで

Slide 7

Slide 7 text

使用言語に着目したバックグラウンド 3社目(現職エウレカ)業務 全てが G olangになる 自社オンラインデー ティングサー ビス P airs(https://p airs.lv/) のサー バサイドは全て G olangで記述されている。 複数のマイクロサー ビスからなるが、 基本的には全て G olang。 一部機械学習関連は P yt hon、 一部内部ツー ルはその他の 言語もある。

Slide 8

Slide 8 text

G olangの特徴 シンプルな言語仕様 顧客が本当に求めていた better C という印象。 充実した標準ライブラリ・ ツー ル群 強い静的型付け G oogleが作っているという謎の安心感

Slide 9

Slide 9 text

良い所(1) 言語仕様が小さいため、 基本の習得が容易ですぐにプロダクション コー ドを書けるようになる。 繰り返し文が f o r しかない。 w h i l e も f o r e a c h もない。 可視性を表す修飾子( p u b l i c , p r i v a t e )もなく、U pp er or L ow er で表現。 局所的な実装レベルで見れば、 誰が書いてもだいたい同じよう なコー ドになる。

Slide 10

Slide 10 text

良い所(2) 無駄なコー ディング規約に関する議論を全くしなくていい。 g o f m t (標準の規約に従ったコー ドフォー マットを行う)は神 ツー ル。 他の言語にも同等のツー ルが欲しいくらい。 これが無いと…… コー ディング規約の徹底 コー ドフォー マットの共通設定ファイルを各人のエディ タ/IDE 毎に作って配布・ メンテナンス 不毛でだるい。 本質的でない。

Slide 11

Slide 11 text

良い所(3) 局所的な高速化が容易 ベンチマー クテストが組み込みのテスト機能の一部になってお り( g o t e s t - b e n c h )、 マイクロベンチマー クをとることによ る速度改善が行いやすい。 そもそもの処理速度が C ++などに比肩する程度だが、 メモリ確 保のやり方が悪いと動的型付けのスクリプト言語並の速度にな るので、 このようになっていないか確認しやすい。 メモリアロケー ションの実行回数の検出がベンチマー ク時 に出来( - b e n c h m e m )、 その最小化を目指すだけでも桁違 いに高速化する。

Slide 12

Slide 12 text

良い所(4) 標準ライブラリが充実している 小さなアプリケー ションであれば、 標準以外のライブラリやフ レー ムワー クを使う必要がないケー スも。 コマンドラインツー ルなら、 個人的には外部連携の SDK 以外の 標準以外のimp ort は不要と思う。

Slide 13

Slide 13 text

良い所(5) 標準ライブラリのソー スコー ドが容易に読める 実際に標準の正規表現ライブラリ( r e g e x p )を読んでみた話。 https://dev elop ers.eur e.jp/t ech/golang‑r egexp/ 手続き的だが素直な処理。 https://git hu b.com/golang/go/blob/mast er/sr c/r egexp/e x ec.go s o r t とか含めてアルゴリズム系のパッケー ジはその学 習にも良さそう。 G olang は 1.5系からコンパイラも G oで書かれるようになった ので、 その気になればコンパイラも読めるはず……! 言語仕様の小ささと黒魔術的な処理の書きにくさもあってか、 普段自身が書いているコー ドとライブラリのコー ドの書き方の 差異は思ったより小さい。

Slide 14

Slide 14 text

つらい所(1) 総称型(ジェネリクス)が無い 似て非なる複数の型に対して、 コピペの様な処理を大量に書か なければならないことも。 このパッケー ジ https://git hu b.com/t ay lor chu/gener ic のよう に、 g o g e n e r a t e を使ったり、 i n t e r f a c e を使ったり、 埋 め込み構造体を上手く使えば実現可能だが、 あった方がシンプ ルではないかと思う。(個人差があります) パラダイムの違いとはいえ、 オブジェクト指向的に書ける言語 においてはあった方が楽だなと思うことがまれにある。

Slide 15

Slide 15 text

つらい所(2) 例外が無い そのための e r r o r int er face 及び p k g / e r r o r s だが…… 大きめのアプリケー ションの場合、 例外機構で処理した方がシ ンプルになるのではないかと思うケー スも。

Slide 16

Slide 16 text

つらい所(3) まだまだ使用者が少なく、 標準以外のライブラリの採用に慎重を要 する。 とあるlogger(結構メジャー)をアクロバティックな使い方をし ていた(1.5系使用時代)。 自社アプリケー ションを1.6系以上にアップデー トしようとし たら、 修正中にp anic地獄。 logger の内部のmap が同時書き込みに対してu ns afeであること を明示するためp anicを起こす挙動になっていた……! https://t ip.golang.or g/doc/go1.6#ru nt ime あるべき姿にはなったわけであるが。 とはいえこれはcontributeチャンスではある。

Slide 17

Slide 17 text

学習方法

Slide 18

Slide 18 text

学習方法(1) まずは A T our of G o(https://go‑t our‑jp.appsp ot.com/) で触ってみ る。 はじめての G o言語、 スター ティング G o言語 など、 初心者向けの書 籍は最初に手元にあった方がよい。 環境構築についてのはまりを減らす。 G O P A T H の考え方な ど。 理想はそのあたりを把握している人が近くにいること。

Slide 19

Slide 19 text

学習方法(2) T our of G o や書籍などで概要を把握したら、 コマンドラインツー ル などを作ってみる。 既知の API のコマンドラインクライアントなど。 天気予報や T w itt er とか。

Slide 20

Slide 20 text

学習方法(3) 作りながら生じた疑問やライブラリの使い方などを、 以下を参照し て解決していく。 公式ドキュメント パッケー ジ https://golang.or g/p kg/ E ffect iv e G o https://golang.or g/doc/effect iv e_go.ht ml T he G o B log https://blog.golang.or g/ G o W iki https://git hu b.com/golang/go/w iki G o by E x amp le https://goby ex amp le.com/ G olang コミュニティ界隈の人達の SNS やブログなど含めたアウト プットをフォロー する。

Slide 21

Slide 21 text

Q . 公式が多いな????

Slide 22

Slide 22 text

A . 公式があればだいたい事足ります(効果には 個人差があります)

Slide 23

Slide 23 text

まとめ

Slide 24

Slide 24 text

まとめ G olangはコンパクトな仕様と充実した標準の機構、 及び公式ドキュ メントにより、 学習、 規約の最小化、 処理の最適化が容易。 オブジェクト指向言語として使う事ができるが、 他のオブジェクト 指向言語がほとんど備えているが G olangに存在しない機構があるの で、 代替機構による独自のノウハウが必要になる。 まだまだこれからの言語なので、 一緒にやっていきましょう。