Save 37% off PRO during our Black Friday Sale! »

cocone Teck Talk Vol.1 -Java開発者のGoプロジェクト1年の振り返り

7ed7c8dbd917b000d5eb633e3519c123?s=47 cocone
August 17, 2021

cocone Teck Talk Vol.1 -Java開発者のGoプロジェクト1年の振り返り

Go?Projectアサイン
Goという壁
GoとJavaの差
Goと仲良く慣れるまでの道のり
まだ慣れないGoのところ
GoでGo!Go!Go!

7ed7c8dbd917b000d5eb633e3519c123?s=128

cocone

August 17, 2021
Tweet

Transcript

  1. Java開発者の Goプロジェクト1年の振り返り

  2. 林 賛昊(イム チャノ)
 サーバー/ポケコロツイン開発リーダー
 職務経歴
 ・NHN Japan株式会社(現Line) 
 ・cocone株式会社 


    ・NC Japan株式会社 
 趣味
 Outdoor系(キャンプ、登山、運動) 
 社内でストラックアウトができた! 
 blackpink

  3. 目次
 3 • Go? プロジェクトアサイン
 • Goという壁
 • GoとJavaの差
 •

    Goと仲良く慣れるまでの道のり
 • まだなれないGoのところ
 • GoでGo!Go!Go!

  4. 開発言語経歴(ほとんどがJava開発)
 4 .Ne PHP C# Python No de. js AS

    Obje ctive C Andr oid Uni...
  5. Go? プロジェクトアサイン
 5 CTO Kさん ME 新規プロジェクトがリリース直 近ですが、開発が足りないの でお願いします。 できますね?

    アハハハハハ ^_____^
  6. Deep Impact!
 6 GO Java人生からいきなりGo? 生き残るのを祈ります。。

  7. 救いの手
 7 • 実は抗体があった
 ◦ 社内Go勉強会参加
 ◦ 少し触ってみた
 • 開発中のプロジェクトのため、サポートがあった


    • リリースまで1ヶ月残っていた
 ◦ CMS作成でトレーニングを始めた

  8. Goの特徴
 8 • 早い
 ◦ コンパイル、起動が秒速!!
 ◦ 処理スピード(Go:機械語、Javaはバイトコード)
 • メモリ管理をGoで行う


    • モジュールだけで動く
 • goroutine軽量スレッド処理(channel)
 • シンプルで使いやすい

  9. Goという壁 - ポインター型、バリュー型
 9 • ポインター型
 ◦ ポインターで参照する
 ◦ *StructA,

    []*StructB
 ◦ structA := &StructA{}
 • バリュー型
 ◦ 値をコピーして参照する
 ◦ StructA、[]StructB
 ◦ structA := StructA{}
 • Map / Sliceはポインター型のみ

  10. Goという壁 - タイプの厳格さ
 10 • タイプの厳格さ
 ◦ int / int8

    / int16/ int32 / Int64, (uintprt)
 ※int : OSやCPUなどの実装系に依存した

  11. Goという壁 - nil
 11 • nil (javaのnullに該当する)
 • Goのnil:型を持つ
 ←

    結果はfalse
  12. Goという壁 - panic
 12 • JavaのExceptionに該当
 • panicを処理しないとプロセスが終了する
 ◦ APが死亡することもあった


    • defer{
 recover{}
 }でハンドリングできる
 ◦ java : try ~ catch ~ finally

  13. error
 13 • errorは処理の結果によるもの
 • functionのreturnで異常終了をお知らせる
 ◦ func testFunction() (int32,

    error) {}
 • errorは処理しなくてもいい
 ◦ rVal1, _ := testFunction()
 

  14. GoとJavaの差 - interface / interface{}
 14 • interface / interface{}


    ◦ inteface
 ▪ Go, Java : 概念
 ◦ interface{}
 ▪ Java:interface型はない。Objectに近い
 • Object → super class
 ▪ Go:型(Data Type)
 • interface{} → 他のデータタイプと無関係
 • 全てのデータタイプが入れる

  15. GoとJavaの差 - その他
 15 • multiple return value
 ◦ Goで一番嬉しい機能


    • package
 ◦ Goはクラスの概念がないため、package単位になる
 • 使わない変数・importはコンパイルエラーになる

  16. Goと仲良く慣れる近道
 16 • Javaの習性を捨てる
 ◦ GoはObject指向の言語ではない(公式な言及はない)
 • 真似する
 ◦ Goのコードを読む、同じく実装する


    • CodeStyle Checkerを活用する
 ◦ checkstyleを利用中

  17. まだなれないGoのところ
 
 17 • 暗黙的な処理(型推論)
 ◦ param := 100 ->

    var param int = 100
 ◦ var sliceParam []string -> nil だが初期化される
 • primitive typeのアドレス参照
 ◦ count := 100 abc := &count
 • 関数型変数
 ◦ func sampleFunction(paramFunc valFunc() rtn)
 

  18. Javaが恋しくなるところ
 18 • Genericsが使えない
 • 高度な抽象化が難しい
 • interface型のConvert
 ◦ タイプチェックから変換が必要


    ◦ 何が入っているかわかってるからやってくれ
 
 

  19. GoでGo!Go!Go!
 19 • 軽い、早い
 ◦ 本番モジュール:10Mb程度
 • 本番はGoモジュールだけで完結
 ◦ 環境構築がいらない


    • 学習しやすい
 • Google様( 個人の感想です )が開発してる!!
 

  20. ポケコロツイン
 20 技術スタック
 Server Go Client Unity (C#) 通信 gRPC

    データタイプ protocol buffer
  21. 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. ご清聴ありがとうございます
 22