$30 off During Our Annual Pro Sale. View Details »

Goの標準ライブラリに学ぶジェネリクス

tychy
June 15, 2023

 Goの標準ライブラリに学ぶジェネリクス

tychy

June 15, 2023
Tweet

More Decks by tychy

Other Decks in Programming

Transcript

  1. 1
    Goの標準ライブラリに学ぶジェネリクス
    Ryu Yamada
    Mercari.go #22
    June 15, 2023

    View Slide

  2. 2
    自己紹介
    ● Ryu Yamada
    ○ https://github.com/tychy
    ○ https://twitter.com/tychy16
    ● 2022年 4 月入社
    ○ Partner Platform Team
    ● Backend Engineer

    View Slide

  3. 3
    ジェネリクス使ってますか?
    Agenda
    timeパッケージでの利用例
    slices/mapsパッケージでの利用例
    標準ライブラリにジェネリクスを導入する難しさ
    02
    03
    04
    01

    View Slide

  4. 4
    ジェネリクス使ってますか?
    Go1.18でリリースされた待望の機能
    実際使ってますか?
    ● 使い所が難しい...
    ● 今のところユースケースがない...
    ● 気はなってはいる...
    🤔
    標準ライブラリでの使い方を見てみよう
    💡

    View Slide

  5. 5
    timeパッケージでの利用例
    ● atoiをジェネリクスを使って実装
    ● []byteとstringの変換がいらない
    日付と時刻の操作を行うパッケージ

    View Slide

  6. 6
    timeパッケージでのご利益
    ● パフォーマンスの向上
    ● 可読性と簡潔性の向上
    ● atoiをジェネリクスを使って実装
    ● []byteとstringの変換がいらない
    https://github.com/golang/go/commit/72c58f
    b77192f7d17d87663c943360a48aae11dc
    MarshalJSONを高速化

    View Slide

  7. 7
    出来ないこと

    View Slide

  8. 8
    メソッドではジェネリクスは利用できない
    メソッドでジェネリクスは利用できない
    これはダメ

    View Slide

  9. 9
    関数として定義するしかない
    👍
    ジェネリクスを使いたいなら
    関数に切り出す必要がある

    View Slide

  10. 10
    slices/mapsパッケージ
    ● Go1.21で追加予定
    ● sliceやmapに対する操作を提供

    View Slide

  11. 11
    標準ライブラリ特有の難しさ
    math.Abs/Min/Maxやlist.List等にもジェネリクス入れない
    の?
    使いどころはわかってきた
    💡
    🤔
    list.Listを例に考えてみる

    View Slide

  12. 12
    標準ライブラリ特有の難しさ
    list.Listはinterface{}型を利用して実装されている

    View Slide

  13. 13
    標準ライブラリ特有の難しさ
    ジェネリクスを使って実装し直すと後方互換性が失われる
    型が違うのでコンパイルできない

    View Slide

  14. 14
    考えられる解決策
    特に標準パッケージではジェネリクスへの移行は容易ではない
    解決策も議論されている
    ● ジェネリクスを使って実装されたV2パッケージを用意
    ● ジェネリクス用の関数を分けて定義する

    View Slide

  15. 15
    ジェネリクスの現在地とこれから
    標準ライブラリではジェネリクスの利用が始まっている
    ● 今回紹介した例以外にもatomic.Pointer型で利用されている
    ● slices/mapsが標準パッケージに取り込まれた
    ジェネリクスを活用し始める良いタイミング!

    View Slide