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
Goの標準ライブラリに学ぶジェネリクス
Search
tychy
June 15, 2023
Programming
0
740
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
270
Other Decks in Programming
See All in Programming
LLM Supervised Fine-tuningの理論と実践
datanalyticslabo
8
1.8k
オニオンアーキテクチャを使って、 Unityと.NETでコードを共有する
soi013
0
350
Compose UIテストを使った統合テスト
hiroaki404
0
120
数十万行のプロジェクトを Scala 2から3に完全移行した
xuwei_k
0
630
shadcn/uiを使ってReactでの開発を加速させよう!
lef237
0
240
PHPで作るWebSocketサーバー ~リアクティブなアプリケーションを知るために~ / WebSocket Server in PHP - To know reactive applications
seike460
PRO
2
720
Jaspr Dart Web Framework 박제창 @Devfest 2024
itsmedreamwalker
0
140
ある日突然あなたが管理しているサーバーにDDoSが来たらどうなるでしょう?知ってるようで何も知らなかったDDoS攻撃と対策 #phpcon.2024
akase244
2
7.7k
PSR-15 はあなたのための ものではない? - phpcon2024
myamagishi
0
360
良いユニットテストを書こう
mototakatsu
11
3.5k
BEエンジニアがFEの業務をできるようになるまでにやったこと
yoshida_ryushin
0
100
ChatGPT とつくる PHP で OS 実装
memory1994
PRO
3
160
Featured
See All Featured
How GitHub (no longer) Works
holman
312
140k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
19
2.3k
How to Think Like a Performance Engineer
csswizardry
22
1.3k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
940
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
3
340
Making Projects Easy
brettharned
116
6k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
171
50k
Documentation Writing (for coders)
carmenintech
67
4.5k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.9k
The World Runs on Bad Software
bkeepers
PRO
66
11k
Bash Introduction
62gerente
609
210k
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が標準パッケージに取り込まれた ジェネリクスを活用し始める良いタイミング!