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

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

cocone
August 17, 2021

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

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

cocone

August 17, 2021
Tweet

More Decks by cocone

Other Decks in Programming

Transcript

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

    View Slide

  2. 林 賛昊(イム チャノ)

    サーバー/ポケコロツイン開発リーダー

    職務経歴

    ・NHN Japan株式会社(現Line) 

    ・cocone株式会社 

    ・NC Japan株式会社 

    趣味

    Outdoor系(キャンプ、登山、運動) 

    社内でストラックアウトができた! 

    blackpink


    View Slide

  3. 目次

    3
    ● Go? プロジェクトアサイン

    ● Goという壁

    ● GoとJavaの差

    ● Goと仲良く慣れるまでの道のり

    ● まだなれないGoのところ

    ● GoでGo!Go!Go!


    View Slide

  4. 開発言語経歴(ほとんどがJava開発)

    4
    .Ne
    PHP
    C#
    Python
    No
    de.
    js
    AS
    Obje
    ctive
    C
    Andr
    oid
    Uni...

    View Slide

  5. Go? プロジェクトアサイン

    5
    CTO Kさん
    ME
    新規プロジェクトがリリース直
    近ですが、開発が足りないの
    でお願いします。
    できますね?
    アハハハハハ
    ^_____^

    View Slide

  6. Deep Impact!

    6
    GO
    Java人生からいきなりGo?
    生き残るのを祈ります。。

    View Slide

  7. 救いの手

    7
    ● 実は抗体があった

    ○ 社内Go勉強会参加

    ○ 少し触ってみた

    ● 開発中のプロジェクトのため、サポートがあった

    ● リリースまで1ヶ月残っていた

    ○ CMS作成でトレーニングを始めた


    View Slide

  8. Goの特徴

    8
    ● 早い

    ○ コンパイル、起動が秒速!!

    ○ 処理スピード(Go:機械語、Javaはバイトコード)

    ● メモリ管理をGoで行う

    ● モジュールだけで動く

    ● goroutine軽量スレッド処理(channel)

    ● シンプルで使いやすい


    View Slide

  9. Goという壁 - ポインター型、バリュー型

    9
    ● ポインター型

    ○ ポインターで参照する

    ○ *StructA, []*StructB

    ○ structA := &StructA{}

    ● バリュー型

    ○ 値をコピーして参照する

    ○ StructA、[]StructB

    ○ structA := StructA{}

    ● Map / Sliceはポインター型のみ


    View Slide

  10. Goという壁 - タイプの厳格さ

    10
    ● タイプの厳格さ

    ○ int / int8 / int16/ int32 / Int64, (uintprt)

    ※int : OSやCPUなどの実装系に依存した


    View Slide

  11. Goという壁 - nil

    11
    ● nil (javaのnullに該当する)

    ● Goのnil:型を持つ

    ← 結果はfalse

    View Slide

  12. Goという壁 - panic

    12
    ● JavaのExceptionに該当

    ● panicを処理しないとプロセスが終了する

    ○ APが死亡することもあった

    ● defer{

    recover{}

    }でハンドリングできる

    ○ java : try ~ catch ~ finally


    View Slide

  13. error

    13
    ● errorは処理の結果によるもの

    ● functionのreturnで異常終了をお知らせる

    ○ func testFunction() (int32, error) {}

    ● errorは処理しなくてもいい

    ○ rVal1, _ := testFunction()


    View Slide

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

    14
    ● interface / interface{}

    ○ inteface

    ■ Go, Java : 概念

    ○ interface{}

    ■ Java:interface型はない。Objectに近い

    ● Object → super class

    ■ Go:型(Data Type)

    ● interface{} → 他のデータタイプと無関係

    ● 全てのデータタイプが入れる


    View Slide

  15. GoとJavaの差 - その他

    15
    ● multiple return value

    ○ Goで一番嬉しい機能

    ● package

    ○ Goはクラスの概念がないため、package単位になる

    ● 使わない変数・importはコンパイルエラーになる


    View Slide

  16. Goと仲良く慣れる近道

    16
    ● Javaの習性を捨てる

    ○ GoはObject指向の言語ではない(公式な言及はない)

    ● 真似する

    ○ Goのコードを読む、同じく実装する

    ● CodeStyle Checkerを活用する

    ○ checkstyleを利用中


    View Slide

  17. まだなれないGoのところ


    17
    ● 暗黙的な処理(型推論)

    ○ param := 100 -> var param int = 100

    ○ var sliceParam []string -> nil だが初期化される

    ● primitive typeのアドレス参照

    ○ count := 100 abc := &count

    ● 関数型変数

    ○ func sampleFunction(paramFunc valFunc() rtn)


    View Slide

  18. Javaが恋しくなるところ

    18
    ● Genericsが使えない

    ● 高度な抽象化が難しい

    ● interface型のConvert

    ○ タイプチェックから変換が必要

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



    View Slide

  19. GoでGo!Go!Go!

    19
    ● 軽い、早い

    ○ 本番モジュール:10Mb程度

    ● 本番はGoモジュールだけで完結

    ○ 環境構築がいらない

    ● 学習しやすい

    ● Google様(
    個人の感想です
    )が開発してる!!


    View Slide

  20. ポケコロツイン

    20
    技術スタック

    Server Go
    Client Unity (C#)
    通信 gRPC
    データタイプ protocol buffer

    View Slide

  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


    View Slide

  22. ご清聴ありがとうございます

    22

    View Slide