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
1.2k
0
Share
Goにおけるポインタの使いどころ
uji
January 16, 2021
More Decks by uji
See All by uji
【Go ハンズオン】Windows / Linux コマンドを Go で再現
uji
1
110
testdata ディレクトリを活用しよう!
uji
1
430
MCP 公式の Go SDK で QA データ登録アシスタントを作ってみた
uji
0
170
Green Tea GCの動作を紙芝居にしてみる
uji
1
190
Go Proverbs の紹介
uji
2
200
Go標準の暗号ライブラリメンテナンス戦略
uji
3
750
NOT A HOTEL TECH TALK ーSOFTWARE 3.0への道筋ー NEXT Web3 (2024-08-07)
uji
0
250
マネーフォワード ME ブロックチェーン連携機能におけるGoの活用方法
uji
1
300
Goはブロックチェーン領域でなぜ使われ、どのように活躍しているのか
uji
1
810
Other Decks in Technology
See All in Technology
ルールやカスタム機能、どう使う?理想の出力を引き出すために今知りたいIBM Bob 5つの機能
muehara
1
330
製造業のクラウド活用最適解〜AI,DXを加速するデータ基盤の作り方〜
hamadakoji
0
370
美味しいスイスチーズを作ろう🧀🐭
taigamikami
1
230
新規事業を牽引する技術選定 〜フルスタックTypeScript開発の実践事例〜
nullnull
3
340
Djangoユーザが知っ得なPostgreSQL機能 - 設計の選択肢を増やす / Djang-use-PostgreSQL
soudai
PRO
0
180
ChatworkとBPaaS 異なる特性で学んだAI機能開発の ベストプラクティス
kubell_hr
2
2.7k
Building applications in the Gemini API family.
line_developers_tw
PRO
0
1.4k
Platform engineering for developers, architects & the rest of us (AI agents)
danielbryantuk
0
180
AIガバナンス実践 - 生成AIコネクタのデータ漏洩リスクと実務対策
knishioka
0
180
EventBridge Connection
_kensh
2
380
AIにフローを作らせようとして挫折した話
hamatsutaichi
0
180
「速く作る」から「正しく作る」へ ─ 生成AI時代の開発フロー改革の ロードマップと実行 ─
starfish719
0
7.5k
Featured
See All Featured
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
320
My Coaching Mixtape
mlcsv
0
140
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
How GitHub (no longer) Works
holman
316
150k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
130
Scaling GitHub
holman
464
140k
We Are The Robots
honzajavorek
0
240
How to Ace a Technical Interview
jacobian
281
24k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
720
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
310
We Have a Design System, Now What?
morganepeng
55
8.2k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
420
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