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
testdata ディレクトリを活用しよう!
uji
1
310
MCP 公式の Go SDK で QA データ登録アシスタントを作ってみた
uji
0
130
Green Tea GCの動作を紙芝居にしてみる
uji
1
140
Go Proverbs の紹介
uji
2
160
Go標準の暗号ライブラリメンテナンス戦略
uji
3
700
NOT A HOTEL TECH TALK ーSOFTWARE 3.0への道筋ー NEXT Web3 (2024-08-07)
uji
0
210
マネーフォワード ME ブロックチェーン連携機能におけるGoの活用方法
uji
1
260
Goはブロックチェーン領域でなぜ使われ、どのように活躍しているのか
uji
1
770
標準パッケージ初のgenerics利用事例 "sync/atomic.Pointer"
uji
2
960
Other Decks in Technology
See All in Technology
RALGO : AIを組織に組み込む方法 -アルゴリズム中心組織設計- #RSGT2026 / RALGO: How to Integrate AI into an Organization – Algorithm-Centric Organizational Design
kyonmm
PRO
3
710
製造業から学んだ「本質を守り現場に合わせるアジャイル実践」
kamitokusari
0
310
_第4回__AIxIoTビジネス共創ラボ紹介資料_20251203.pdf
iotcomjpadmin
0
170
Next.js 16の新機能 Cache Components について
sutetotanuki
0
210
業務の煩悩を祓うAI活用術108選 / AI 108 Usages
smartbank
9
19k
Bedrock AgentCore Evaluationsで学ぶLLM as a judge入門
shichijoyuhi
2
320
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
3.6k
Node vs Deno vs Bun 〜推しランタイムを見つけよう〜
kamekyame
1
240
2025年のデザインシステムとAI 活用を振り返る
leveragestech
0
700
技術選定、下から見るか?横から見るか?
masakiokuda
0
180
Qiita Bash アドカレ LT #1
okaru
0
170
#22 CA × atmaCup 3rd 1st Place Solution
yumizu
1
130
Featured
See All Featured
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
270
Chasing Engaging Ingredients in Design
codingconduct
0
94
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.1k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Building AI with AI
inesmontani
PRO
1
610
Paper Plane (Part 1)
katiecoart
PRO
0
2.8k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
6.8k
Believing is Seeing
oripsolob
0
19
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
0
2.3k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
7.9k
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