Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Go1.27で導入されるジェネリクスメソッドでできること
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
mackee
June 12, 2026
Programming
190
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Go1.27で導入されるジェネリクスメソッドでできること
kamakural.go #9
mackee
June 12, 2026
More Decks by mackee
See All by mackee
perlをWebAssembly上で動かすと何が嬉しいの??? / Where does Perl-on-Wasm actually make sense?
mackee
0
1k
Agentに至る道 〜なぜLLMは自動でコードを書けるようになったのか〜
mackee
6
5.9k
今!ソフトウェアエンジニアがハードウェアに手を出すには
mackee
14
7.1k
ワンバイナリWebサービスのススメ
mackee
10
8.8k
tanukistack ライブコーディング / tanukistack live-coding
mackee
0
690
range over funcの使い道と非同期N+1リゾルバーの夢 / about a range over func
mackee
0
1.2k
perl for shell, awk and sed programmers
mackee
3
2.8k
今更GoのWebフレームワークを作ろうとしているワケ / Why am I trying to create a Go web framework now?
mackee
1
1.1k
database/sqlでNullを扱う歴史とsql.Null[T]の登場 / sql.Null[T] history
mackee
0
1k
Other Decks in Programming
See All in Programming
技術的負債解消で開発者の未来を開く- AIの力でコード刷新
kmd2kmd
0
120
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
270
はてなアカウント基盤 State of the Union
cockscomb
1
860
Oxcを導入して開発体験が向上した話
yug1224
4
340
AI駆動開発を妨げる技術的負債の解消アプローチ / ai-refactoring-approach
minodriven
14
7.2k
The ROI of Quarkus for Spring Boot Applications
hollycummins
0
140
AIで効率化できた業務・日常
ochtum
0
150
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.3k
AI 輔助遺留系統現代化的經驗分享
jame2408
1
1k
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
950
Javaの型とAI時代に型が大事な理由 / java types and type in AI era
kishida
2
150
コンテキストの使い捨てをやめる — ビジネスルール駆動開発と miko —
ioki
0
240
Featured
See All Featured
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
A better future with KSS
kneath
240
18k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
Navigating Team Friction
lara
192
16k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.8k
Rails Girls Zürich Keynote
gr2m
96
14k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
310
The Curse of the Amulet
leimatthew05
2
13k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
620
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
Transcript
Go1.27で導入されるジェネリ クスメソッドでできること macopy(@mackee_w) kamakura.go #9
おさらい: Goのジェネリクス (Go 1.18〜) 型パラメータを書けるのは関数と型だけ。メソッドには書けなかった
ちなみにTypeScriptだと メソッドにも型パラメータが書けます
ちなみにTypeScriptだと • TypeScriptの型はコンパイル時に消える(type erasure) ◦ 「実行時にどの型の実体が必要か」という問題がそもそも存在しない • Goはジェネリクスから実体のコードを生成するので、同じようにはいかな い
なぜ書けなかったのか • Goでは「メソッド = インターフェースを実装するもの」だった ◦ インターフェース経由の呼び出しは動的 → どのインスタンス化が実 行時に必要か、コンパイル時に決められない
◦ FAQ「Goにジェネリックメソッドが入ることはないと思われます」
なぜ書けるようになるのか • 2026-01 Goの共同設計者 Robert Griesemer が提案(#77273)→ 約 1ヶ月でaccepted ◦
"concrete methods are a language feature that is useful in itself, irrespective of interfaces" ◦ メソッドはインターフェースのためだけのものじゃない。「レシーバ付き の関数」と考えよう
Go 1.27ではこう書ける
Go 1.27ではこう書ける • レシーバの型パラメータとメソッド自身の型パラメータの二重持ちもOK • stack.Map[int](...) と明示してもいい
実例①: Webフレームワーク tanukirpcのAPI設 計における課題 mackee/tanukirpc … 自作のGo Webアプリフレームワーク。DI機構 (Registry)を Context[Reg]
として持ち回る • 既存メソッドはレシーバ由来の Reg だけで書ける
実例①: Webフレームワーク tanukirpcのAPI設 計における課題 • RouteWithTransformer は変換先の新しい型パラメータ Reg2 が必 要
→ メソッドにできなかった
Go 1.27ならメソッドにできる • APIの統一感が戻ってくる
実例②: テストで作っていた Mustヘルパ 「エラーは出ない前提で1番目の値だけ欲しい」… samber/lo の lo.Must が有名(エラーならpanic) でもテストならpanicではなく t.Fatal
で落としたい。じゃあ t を受け取れば いい?
実例②: テストで作っていた Mustヘルパ • 多値を返す呼び出しは他の引数と混ぜられない(単独引数でなければな らない) • メソッドにして t をレシーバに置ければ解決するのに、型パラメータが書
けない…
というわけで私はこう書いていた • 値をジェネリック構造体に一旦包んで、t はメソッドで後から受ける2段構 え • 「型パラメータはレシーバ経由でしか持てない」時代のイディオム
Go 1.27なら1段で書ける • MustExpect のような中間構造体はもういらない • 標準にも (*testing.T).Must の提案(#54297)がジェネリクスメソッ ド採択で再始動
◦ まだ提案中です。入るかどうかはわからない ◦ ただ、この提案には「testing.TB には足せない」という壁が…
できそうでできないこと • インターフェースのメソッドにジェネリクスは書けない • testing.TB に Must を足せないのはこれ。T/B/F に個別に生やすし かない
できそうでできないこと • ジェネリクスメソッドはインターフェースを実装できないので、既存のイン ターフェースを満たすためにジェネリクスメソッドを書くこともできない • ジェネリック「型」の普通のメソッドがインターフェースを実装するのは従来 どおりOK
その他できないこと • reflectからも見えない(MethodByName で取れない)
標準ライブラリはどう変わる ? Go 1.27で追加されるジェネリクスメソッドのAPIはmath/rand/v2に追加がある • v2設計時にジェネリクスメソッドがなくて、関数 rand.N しか作れなかったや つ •
「メソッドとして自然に書けるAPI」の提案はこれから増えていくはず
まとめ • Go 1.27からメソッドに型パラメータが書けます ◦ 「メソッド = インターフェースのため」から「メソッド = レシーバ付き関
数」への発想の転換 • インターフェース絡みとreflectは割り切り(書けない・実装しない・見えな い) • 手元の「型パラメータを持つためだけの中間構造体」や「メソッドになれな かった関数」は書き直せるかも
参考リンク • #77273 spec: generic methods for Go • #77853
math/rand/v2: add method form of N • #54297 proposal: must: Do(testing.T.Mustの議論) • Go 1.27 Release Notes(draft) • mackee/tanukirpc