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.1k
0
Share
Goにおけるポインタの使いどころ
uji
January 16, 2021
More Decks by uji
See All by uji
【Go ハンズオン】Windows / Linux コマンドを Go で再現
uji
1
100
testdata ディレクトリを活用しよう!
uji
1
380
MCP 公式の Go SDK で QA データ登録アシスタントを作ってみた
uji
0
160
Green Tea GCの動作を紙芝居にしてみる
uji
1
160
Go Proverbs の紹介
uji
2
190
Go標準の暗号ライブラリメンテナンス戦略
uji
3
740
NOT A HOTEL TECH TALK ーSOFTWARE 3.0への道筋ー NEXT Web3 (2024-08-07)
uji
0
240
マネーフォワード ME ブロックチェーン連携機能におけるGoの活用方法
uji
1
290
Goはブロックチェーン領域でなぜ使われ、どのように活躍しているのか
uji
1
800
Other Decks in Technology
See All in Technology
AIを共同作業者にして書籍を執筆する方法 / How to Write a Book with AI as a Co-Creator
ama_ch
2
150
Do Ruby::Box dream of Modular Monolith?
joker1007
1
350
Microsoft 365 / Microsoft 365 Copilot : 自分の状態を確認する「ラベル」について
taichinakamura
0
350
Route 53 Global Resolver で高額課金発生!
otanikohei2023
0
120
AI時代のガードレールとしてのAPIガバナンス
nagix
0
310
Claude Code を安全に使おう勉強会 / Claude Code Security Basics
masahirokawahara
12
37k
AWS Agent Registry の基礎・概要を理解する/aws-agent-registry-intro
ren8k
3
410
AI: Making Admin and Users, Lives Better
kbmsg
0
110
AgentCore×VPCでの設計パターンn選と勘所
har1101
4
320
Cortex Codeのコスト見積ヒントご紹介
yokatsuki
0
110
20260428_Product Management Summit_tadokoroyoshiro
tadokoro_yoshiro
14
15k
独断と偏見で試してみる、 シングル or マルチエージェント どっちがいいの?
shichijoyuhi
1
150
Featured
See All Featured
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
490
Un-Boring Meetings
codingconduct
0
270
From π to Pie charts
rasagy
0
170
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
240
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.5k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
150
Site-Speed That Sticks
csswizardry
13
1.2k
Marketing to machines
jonoalderson
1
5.2k
Code Reviewing Like a Champion
maltzj
528
40k
How to Talk to Developers About Accessibility
jct
2
180
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.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