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
uji
January 16, 2021
Technology
0
1.1k
Goにおけるポインタの使いどころ
uji
January 16, 2021
Tweet
Share
More Decks by uji
See All by uji
Green Tea GCの動作を紙芝居にしてみる
uji
1
93
Go Proverbs の紹介
uji
2
150
Go標準の暗号ライブラリメンテナンス戦略
uji
3
660
NOT A HOTEL TECH TALK ーSOFTWARE 3.0への道筋ー NEXT Web3 (2024-08-07)
uji
0
180
マネーフォワード ME ブロックチェーン連携機能におけるGoの活用方法
uji
1
240
Goはブロックチェーン領域でなぜ使われ、どのように活躍しているのか
uji
1
740
標準パッケージ初のgenerics利用事例 "sync/atomic.Pointer"
uji
2
910
5分で完全理解するGoのiota
uji
11
7.2k
GoのGC (garbage collector)について理解する
uji
11
7.8k
Other Decks in Technology
See All in Technology
私のMCPの使い方
tsubakimoto_s
0
110
大規模サーバーレスAPIの堅牢性・信頼性設計 〜AWSのベストプラクティスから始まる現実的制約との向き合い方〜
maimyyym
10
5k
Click A, Buy B: Rethinking Conversion Attribution in ECommerce Recommendations
lycorptech_jp
PRO
0
110
FinOps について (ちょっと) 本気出して考えてみた
skmkzyk
0
170
新規事業におけるGORM+SQLx併用アーキテクチャ
hacomono
PRO
0
420
[VPoE Global Summit] サービスレベル目標による信頼性への投資最適化
satos
0
130
Claude Codeを駆使した初めてのiOSアプリ開発 ~ゼロから3週間でグローバルハッカソンで入賞するまで~
oikon48
10
5.1k
Introduction to Sansan Meishi Maker Development Engineer
sansan33
PRO
0
310
Wasmのエコシステムを使った ツール作成方法
askua
0
220
Implementing and Evaluating a High-Level Language with WasmGC and the Wasm Component Model: Scala’s Case
tanishiking
0
150
AIエージェント入門 〜基礎からMCP・A2Aまで〜
shukob
0
110
[Codex Meetup Japan #1] Codex-Powered Mobile Apps Development
korodroid
2
1k
Featured
See All Featured
The Invisible Side of Design
smashingmag
302
51k
Gamification - CAS2011
davidbonilla
81
5.5k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Become a Pro
speakerdeck
PRO
29
5.6k
For a Future-Friendly Web
brad_frost
180
10k
Documentation Writing (for coders)
carmenintech
75
5.1k
Designing for humans not robots
tammielis
254
26k
Writing Fast Ruby
sferik
629
62k
BBQ
matthewcrist
89
9.8k
A Modern Web Designer's Workflow
chriscoyier
697
190k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.7k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.4k
Transcript
Goにおける ポインタの使いどころ uji @uji_rb
ポインタの使い分け、上手くできてますか? ポインタによる変数の受け渡しは、値をコピーする必要がなくアドレスを渡すだけで完了 するので効率的 しかし、Goにはガベージコレクションがある ポインタを使いすぎるとガベージコレクションの負荷が高くなり、多くのCPU時間を消費す るようになる可能性
この struct を 値渡しする関数 ポインタ渡しする関数 ベンチマークをとって比較すると ポインタ渡しの方が消費CPU時間が多い
どのような場面でポインタは使われるべき?
引数やレシーバを関数内で書き換える必要がある場合 逆に変更を加えない関数は、値レシーバを使っ た方が 「この関数はレシーバに変更を加えない」 というのがシグネシャだけで明示的にできる
コピーを避けたいデータを引数、レシーバにする場合 例: os.File, sync.Mutex
大きな構造体や配列を扱う場合 フィールドが多い構造体や、要素が多い配列はGCの負荷より値コピーの方のコストが 課題になる場合が出てくる 利便性や変更容易性、GCの負荷等を考慮して決める 迷ったらポインタを使う (Go Code Review
Comments)
大きな構造体をスライスに持たせる場合 スライス は cap 以上に append した際や、for ~ range でsliceの要素を取得する際に、
全レコードのコピーが発生する ポインタにしておくとコピーのコストが抑えられる
まとめ 以下の場面ではポインタの利用を検討する • 引数やレシーバを関数内で書き換える必要がある場合 • コピーを避けたいデータを引数、レシーバにする場合 • 大きな構造体や配列を扱う場合 •
大きな構造体をスライスに持たせる場合
参考 zenn の記事にのせてます https://zenn.dev/uji/articles/f6ab9a06320294146733