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
690
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
230
Other Decks in Programming
See All in Programming
Architectures with Lightweight Stores: New Rules and Options
manfredsteyer
PRO
0
100
スクラムマスターって孤独じゃないですか?
yoshitaroyoyo
1
140
AWSでゲームサーバーを運用! Amazon GameLiftのお話
iriikeita
0
200
CSC307 Lecture 06
javiergs
PRO
0
360
DMMプラットフォームにおけるTiDBの導入から運用まで
pospome
7
3k
Product Management LT会_クアンド新家
shinshin
0
210
Trial
cairolibrary720
1
130
継続的な活動で築く地方エンジニアの道
myamashii
2
350
AWS CDKにおける「再利用性」を考える / aws-cdk-reusability
gotok365
6
1.3k
【Go言語】ジェネリクス
tomo1227
0
170
Temporalを取り巻く仕様を整理する
sajikix
0
110
【Go言語】golangci-lintの使い方
tomo1227
0
270
Featured
See All Featured
Embracing the Ebb and Flow
colly
81
4.3k
Building Effective Engineering Teams - LeadDev
addyosmani
47
2.2k
[RailsConf 2023] Rails as a piece of cake
palkan
35
4.4k
Leading Effective Engineering Teams 2024
addyosmani
3
300
We Have a Design System, Now What?
morganepeng
46
7k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
662
120k
Making Projects Easy
brettharned
111
5.7k
VelocityConf: Rendering Performance Case Studies
addyosmani
321
23k
Testing 201, or: Great Expectations
jmmastey
33
6.9k
Thoughts on Productivity
jonyablonski
64
4.1k
Bootstrapping a Software Product
garrettdimon
PRO
304
110k
GitHub's CSS Performance
jonrohan
1026
450k
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が標準パッケージに取り込まれた ジェネリクスを活用し始める良いタイミング!