Go?Projectアサイン Goという壁 GoとJavaの差 Goと仲良く慣れるまでの道のり まだ慣れないGoのところ GoでGo!Go!Go!
Java開発者のGoプロジェクト1年の振り返り
View Slide
林 賛昊(イム チャノ) サーバー/ポケコロツイン開発リーダー 職務経歴 ・NHN Japan株式会社(現Line) ・cocone株式会社 ・NC Japan株式会社 趣味 Outdoor系(キャンプ、登山、運動) 社内でストラックアウトができた! blackpink
目次 3● Go? プロジェクトアサイン ● Goという壁 ● GoとJavaの差 ● Goと仲良く慣れるまでの道のり ● まだなれないGoのところ ● GoでGo!Go!Go!
開発言語経歴(ほとんどがJava開発) 4.NePHPC#PythonNode.jsASObjectiveCAndroidUni...
Go? プロジェクトアサイン 5CTO KさんME新規プロジェクトがリリース直近ですが、開発が足りないのでお願いします。できますね?アハハハハハ^_____^
Deep Impact! 6GOJava人生からいきなりGo?生き残るのを祈ります。。
救いの手 7● 実は抗体があった ○ 社内Go勉強会参加 ○ 少し触ってみた ● 開発中のプロジェクトのため、サポートがあった ● リリースまで1ヶ月残っていた ○ CMS作成でトレーニングを始めた
Goの特徴 8● 早い ○ コンパイル、起動が秒速!! ○ 処理スピード(Go:機械語、Javaはバイトコード) ● メモリ管理をGoで行う ● モジュールだけで動く ● goroutine軽量スレッド処理(channel) ● シンプルで使いやすい
Goという壁 - ポインター型、バリュー型 9● ポインター型 ○ ポインターで参照する ○ *StructA, []*StructB ○ structA := &StructA{} ● バリュー型 ○ 値をコピーして参照する ○ StructA、[]StructB ○ structA := StructA{} ● Map / Sliceはポインター型のみ
Goという壁 - タイプの厳格さ 10● タイプの厳格さ ○ int / int8 / int16/ int32 / Int64, (uintprt) ※int : OSやCPUなどの実装系に依存した
Goという壁 - nil 11● nil (javaのnullに該当する) ● Goのnil:型を持つ ← 結果はfalse
Goという壁 - panic 12● JavaのExceptionに該当 ● panicを処理しないとプロセスが終了する ○ APが死亡することもあった ● defer{ recover{} }でハンドリングできる ○ java : try ~ catch ~ finally
error 13● errorは処理の結果によるもの ● functionのreturnで異常終了をお知らせる ○ func testFunction() (int32, error) {} ● errorは処理しなくてもいい ○ rVal1, _ := testFunction()
GoとJavaの差 - interface / interface{} 14● interface / interface{} ○ inteface ■ Go, Java : 概念 ○ interface{} ■ Java:interface型はない。Objectに近い ● Object → super class ■ Go:型(Data Type) ● interface{} → 他のデータタイプと無関係 ● 全てのデータタイプが入れる
GoとJavaの差 - その他 15● multiple return value ○ Goで一番嬉しい機能 ● package ○ Goはクラスの概念がないため、package単位になる ● 使わない変数・importはコンパイルエラーになる
Goと仲良く慣れる近道 16● Javaの習性を捨てる ○ GoはObject指向の言語ではない(公式な言及はない) ● 真似する ○ Goのコードを読む、同じく実装する ● CodeStyle Checkerを活用する ○ checkstyleを利用中
まだなれないGoのところ 17● 暗黙的な処理(型推論) ○ param := 100 -> var param int = 100 ○ var sliceParam []string -> nil だが初期化される ● primitive typeのアドレス参照 ○ count := 100 abc := &count ● 関数型変数 ○ func sampleFunction(paramFunc valFunc() rtn)
Javaが恋しくなるところ 18● Genericsが使えない ● 高度な抽象化が難しい ● interface型のConvert ○ タイプチェックから変換が必要 ○ 何が入っているかわかってるからやってくれ
GoでGo!Go!Go! 19● 軽い、早い ○ 本番モジュール:10Mb程度 ● 本番はGoモジュールだけで完結 ○ 環境構築がいらない ● 学習しやすい ● Google様(個人の感想です)が開発してる!!
ポケコロツイン 20技術スタック Server GoClient Unity (C#)通信 gRPCデータタイプ protocol buffer
Q&A / Tips 21● https://play.golang.org/ (web codingツール) ● https://golang.org/ref/spec(blog) ○ https://www.ymotongpoo.com/works/goblog-ja ● https://github.com/avelino/awesome-go(library) ● IDE ○ Intellij-go plugin, vscode, Go Land, Atom
ご清聴ありがとうございます 22