Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Goの標準ライブラリに学ぶジェネリクス
Search
tychy
June 15, 2023
Programming
0
730
Goの標準ライブラリに学ぶジェネリクス
https://gihyo.jp/article/2023/05/tukinami-go-07?summary
tychy
June 15, 2023
Tweet
Share
More Decks by tychy
See All by tychy
データベースロギングの多様性
tychy
0
260
Other Decks in Programming
See All in Programming
eBPF Deep Dive: Architecture and Safety Mechanisms
takehaya
12
1.1k
Modular Monolith Monorepo ~シンプルさを保ちながらmonorepoのメリットを最大化する~
yuisakamoto
10
3.7k
subpath importsで始めるモック生活
10tera
0
380
flutterkaigi_2024.pdf
kyoheig3
0
350
エンジニアとして関わる要件と仕様(公開用)
murabayashi
0
340
Vue.js_好きに捧ぐ Nuxt Hub で簡単に始めるCloudflare
xiombatsg
1
100
チームにとって最適なスキルアップ施策とは何か/what-is-the-best-skill-up-approach-for-team
nobuoooo
0
160
AWS AppSyncを用いた GraphQL APIの開発について - NIFTY Tech Talk #22
niftycorp
PRO
0
110
Reckoner における Datadog Browser Test の活用事例 / Datadog Browser Test at Reckoner
nomadblacky
0
180
EMになってからチームの成果を最大化するために取り組んだこと/ Maximize team performance as EM
nashiusagi
0
130
TypeScript Graph でコードレビューの心理的障壁を乗り越える
ysk8hori
3
1.4k
Leverage LLMs in Java with LangChain4j and Quarkus
hollycummins
0
110
Featured
See All Featured
4 Signs Your Business is Dying
shpigford
181
21k
A better future with KSS
kneath
238
17k
Producing Creativity
orderedlist
PRO
341
39k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
111
49k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
470
Building Your Own Lightsaber
phodgson
103
6.1k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
44
2.2k
We Have a Design System, Now What?
morganepeng
50
7.2k
Rails Girls Zürich Keynote
gr2m
94
13k
Faster Mobile Websites
deanohume
305
30k
Embracing the Ebb and Flow
colly
84
4.5k
Transcript
1 Goの標準ライブラリに学ぶジェネリクス Ryu Yamada Mercari.go #22 June 15, 2023
2 自己紹介 • Ryu Yamada ◦ https://github.com/tychy ◦ https://twitter.com/tychy16 •
2022年 4 月入社 ◦ Partner Platform Team • Backend Engineer
3 ジェネリクス使ってますか? Agenda timeパッケージでの利用例 slices/mapsパッケージでの利用例 標準ライブラリにジェネリクスを導入する難しさ 02 03 04 01
4 ジェネリクス使ってますか? Go1.18でリリースされた待望の機能 実際使ってますか? • 使い所が難しい... • 今のところユースケースがない... • 気はなってはいる...
🤔 標準ライブラリでの使い方を見てみよう 💡
5 timeパッケージでの利用例 • atoiをジェネリクスを使って実装 • []byteとstringの変換がいらない 日付と時刻の操作を行うパッケージ
6 timeパッケージでのご利益 • パフォーマンスの向上 • 可読性と簡潔性の向上 • atoiをジェネリクスを使って実装 • []byteとstringの変換がいらない
https://github.com/golang/go/commit/72c58f b77192f7d17d87663c943360a48aae11dc MarshalJSONを高速化
7 出来ないこと
8 メソッドではジェネリクスは利用できない メソッドでジェネリクスは利用できない これはダメ
9 関数として定義するしかない 👍 ジェネリクスを使いたいなら 関数に切り出す必要がある
10 slices/mapsパッケージ • Go1.21で追加予定 • sliceやmapに対する操作を提供
11 標準ライブラリ特有の難しさ math.Abs/Min/Maxやlist.List等にもジェネリクス入れない の? 使いどころはわかってきた 💡 🤔 list.Listを例に考えてみる
12 標準ライブラリ特有の難しさ list.Listはinterface{}型を利用して実装されている
13 標準ライブラリ特有の難しさ ジェネリクスを使って実装し直すと後方互換性が失われる 型が違うのでコンパイルできない
14 考えられる解決策 特に標準パッケージではジェネリクスへの移行は容易ではない 解決策も議論されている • ジェネリクスを使って実装されたV2パッケージを用意 • ジェネリクス用の関数を分けて定義する
15 ジェネリクスの現在地とこれから 標準ライブラリではジェネリクスの利用が始まっている • 今回紹介した例以外にもatomic.Pointer型で利用されている • slices/mapsが標準パッケージに取り込まれた ジェネリクスを活用し始める良いタイミング!