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

【登壇資料】Goにジェネリックメソッドが入るとどうなるか

Avatar for エブリー エブリー
March 18, 2026
2

 【登壇資料】Goにジェネリックメソッドが入るとどうなるか

20260318 Go Connect #11

Avatar for エブリー

エブリー

March 18, 2026
Tweet

More Decks by エブリー

Transcript

  1. 2 Copyright © 2015 every, Inc. All rights reserved. 自己紹介

    名前:あかがわまさとも 経歴:北海道大学大学院 数学専攻 → 株式会社エブリー 開発1部(25新卒) Go歴:1年半くらい XのQR Xのアイコン
  2. 3 Copyright © 2015 every, Inc. All rights reserved. 今日話すこと

    先月アクセプトされたばかりの spec: generic methods for Go #77273 について • どういうプロポーザルなのか • Goコードへの影響 について話します
  3. 5 Copyright © 2015 every, Inc. All rights reserved. 今できること

    型定義や関数定義に型パラメータを持たせることが できる Result型↓
  4. 6 Copyright © 2015 every, Inc. All rights reserved. 今できないこと

    メソッド定義に型パラメータを持たせることは できない syntax error: method must have no type parameters で怒られる
  5. 7 Copyright © 2015 every, Inc. All rights reserved. spec上で整理してみる

    TypeとFunctionの宣言は型パラメータを つけられる Methodの宣言は型パラメータを つけられない
  6. 8 Copyright © 2015 every, Inc. All rights reserved. spec上で整理してみる

    呼び出し側も同様の制約がある OperandNameは型引数( TypeArgs)をとれる PrimaryExprは型引数を とれない
  7. 9 Copyright © 2015 every, Inc. All rights reserved. spec:

    generic methods for Go #77273 これを以下のようにしようぜ!というのがプロポーザルの概要
  8. 11 Copyright © 2015 every, Inc. All rights reserved. spec:

    generic methods for Go #77273 注意: このプロポーザルでは、「 interfaceのメソッドにも型パラメータを入れられるか」はスコープ外。 generic concrete methods are useful by themselves, even if they don't implement interface methods. 汎用的な具象メソッドは、インターフェースメソッドを実装していなくても、それ自体で有用で す。 spec: generic methods for Go · Issue #77273 · golang/go
  9. 14 Copyright © 2015 every, Inc. All rights reserved. 今まで

    例えば、クエリビルダー 型安全にやろうと思うと、クエリビルダーの初期化で型パラメータを持たせる必要がある
  10. 16 Copyright © 2015 every, Inc. All rights reserved. 結果

    今まで仕方なくレシーバーに持たせていた責務を、メソッドが引き受けられるようになる 他にも、パッケージレベルで定義するしかなかった関数も、引数にとっていた構造体をレシー バーとするメソッドに書き換えられる!
  11. 18 Copyright © 2015 every, Inc. All rights reserved. 今まで

    例えば、ある型 T のコレクションを別の型 U に変換する Map のような操作 型パラメーターを受け取るためには関数でないといけないので、ストリームは関数の引数とし て受け取るしかない
  12. 19 Copyright © 2015 every, Inc. All rights reserved. ジェネリックメソッド導入後

    メソッドが返り値の型を受け取れるので、メソッドチェーンで書けるようになる
  13. 20 Copyright © 2015 every, Inc. All rights reserved. 結果

    スライスやマップなどのコレクション操作や、コンバート関数などは、かなりの数をメソッドに置 き換ることができ、メソッドチェーン的に書けることが増えるはず
  14. 21 Copyright © 2015 every, Inc. All rights reserved. とはいえ…

    Goではエラーは戻り値として返し、その都度チェックするのが慣習なので、エラーハンドリング が必要なものをメソッドチェーンで書くことは難しい もしかしたら Result型がちょっと流行ったりするのかも …?
  15. 22 Copyright © 2015 every, Inc. All rights reserved. まとめ

    • ジェネリックメソッドの導入を求めるプロポーザル spec: generic methods for Go #77273 がアクセプトされた • これにより、責務の持たせ方が変わったり、メソッドチェーンの活用が進むことが予想され る