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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
tychy
June 15, 2023
Programming
0
810
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
310
Other Decks in Programming
See All in Programming
生成AIを活用したソフトウェア開発ライフサイクル変革の現在値
hiroyukimori
PRO
0
100
16年目のピクシブ百科事典を支える最新の技術基盤 / The Modern Tech Stack Powering Pixiv Encyclopedia in its 16th Year
ahuglajbclajep
5
1k
【卒業研究】会話ログ分析によるユーザーごとの関心に応じた話題提案手法
momok47
0
200
副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー
koxya
1
610
組織で育むオブザーバビリティ
ryota_hnk
0
180
カスタマーサクセス業務を変革したヘルススコアの実現と学び
_hummer0724
0
740
MDN Web Docs に日本語翻訳でコントリビュート
ohmori_yusuke
0
660
CSC307 Lecture 08
javiergs
PRO
0
670
Unicodeどうしてる? PHPから見たUnicode対応と他言語での対応についてのお伺い
youkidearitai
PRO
1
2.6k
AIによる開発の民主化を支える コンテキスト管理のこれまでとこれから
mulyu
3
480
AI Schema Enrichment for your Oracle AI Database
thatjeffsmith
0
330
humanlayerのブログから学ぶ、良いCLAUDE.mdの書き方
tsukamoto1783
0
200
Featured
See All Featured
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
120
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Heart Work Chapter 1 - Part 1
lfama
PRO
5
35k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
57
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.8k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
71
Darren the Foodie - Storyboard
khoart
PRO
2
2.4k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.8k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
110
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.6k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.1k
Optimising Largest Contentful Paint
csswizardry
37
3.6k
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が標準パッケージに取り込まれた ジェネリクスを活用し始める良いタイミング!