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
1k
Goにおけるポインタの使いどころ
uji
January 16, 2021
Tweet
Share
More Decks by uji
See All by uji
Go Proverbs の紹介
uji
2
100
Go標準の暗号ライブラリメンテナンス戦略
uji
3
610
NOT A HOTEL TECH TALK ーSOFTWARE 3.0への道筋ー NEXT Web3 (2024-08-07)
uji
0
160
マネーフォワード ME ブロックチェーン連携機能におけるGoの活用方法
uji
1
220
Goはブロックチェーン領域でなぜ使われ、どのように活躍しているのか
uji
1
710
標準パッケージ初のgenerics利用事例 "sync/atomic.Pointer"
uji
2
860
5分で完全理解するGoのiota
uji
11
7.1k
GoのGC (garbage collector)について理解する
uji
11
7.6k
シンプルなモック生成ツール matryer/moq 使ってみた
uji
0
610
Other Decks in Technology
See All in Technology
Strands Agents & Bedrock AgentCoreを1分でおさらい
minorun365
PRO
6
230
JAWS AI/ML #30 AI コーディング IDE "Kiro" を触ってみよう
inariku
3
270
【CEDEC2025】ブランド力アップのためのコンテンツマーケティング~ゲーム会社における情報資産の活かし方~
cygames
PRO
0
230
Lambda management with ecspresso and Terraform
ijin
2
130
バクラクによるコーポレート業務の自動運転 #BetAIDay
layerx
PRO
1
830
【CEDEC2025】現場を理解して実現!ゲーム開発を効率化するWebサービスの開発と、利用促進のための継続的な改善
cygames
PRO
0
720
家族の思い出を形にする 〜 1秒動画の生成を支えるインフラアーキテクチャ
ojima_h
1
340
専門分化が進む分業下でもユーザーが本当に欲しかったものを追求するプロダクトマネジメント/Focus on real user needs despite deep specialization and division of labor
moriyuya
0
1k
AIエージェントを現場で使う / 2025.08.07 著者陣に聞く!現場で活用するためのAIエージェント実践入門(Findyランチセッション)
smiyawaki0820
6
580
20250728 MCP, A2A and Multi-Agents in the future
yoshidashingo
1
210
Mambaで物体検出 完全に理解した
shirarei24
2
210
【CEDEC2025】『ウマ娘 プリティーダービー』における映像制作のさらなる高品質化へ!~ 豊富な素材出力と制作フローの改善を実現するツールについて~
cygames
PRO
0
230
Featured
See All Featured
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
8
750
Adopting Sorbet at Scale
ufuk
77
9.5k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.6k
Side Projects
sachag
455
43k
For a Future-Friendly Web
brad_frost
179
9.9k
Fireside Chat
paigeccino
38
3.6k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
332
22k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.8k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.4k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.3k
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