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
【Go ハンズオン】Windows / Linux コマンドを Go で再現
uji
1
97
testdata ディレクトリを活用しよう!
uji
1
370
MCP 公式の Go SDK で QA データ登録アシスタントを作ってみた
uji
0
150
Green Tea GCの動作を紙芝居にしてみる
uji
1
160
Go Proverbs の紹介
uji
2
180
Go標準の暗号ライブラリメンテナンス戦略
uji
3
730
NOT A HOTEL TECH TALK ーSOFTWARE 3.0への道筋ー NEXT Web3 (2024-08-07)
uji
0
230
マネーフォワード ME ブロックチェーン連携機能におけるGoの活用方法
uji
1
290
Goはブロックチェーン領域でなぜ使われ、どのように活躍しているのか
uji
1
790
Other Decks in Technology
See All in Technology
Blue/Green Deployment を用いた PostgreSQL のメジャーバージョンアップ
kkato1
0
130
開発チームとQAエンジニアの新しい協業モデル -年末調整開発チームで実践する【QAリード施策】-
qa
0
280
テストプロセスにおけるAI活用 :人間とAIの共存
hacomono
PRO
0
160
Phase05_ClaudeCode入門
overflowinc
0
2.1k
_Architecture_Modernization_から学ぶ現状理解から設計への道のり.pdf
satohjohn
2
760
AgentCoreとLINEを使った飲食店おすすめアプリを作ってみた
yakumo
2
240
「コントロールの三分法」で考える「コト」への向き合い方 / phperkaigi2026
blue_goheimochi
0
150
The Rise of Browser Automation: AI-Powered Web Interaction in 2026
marcthompson_seo
0
310
やさしいとこから始めるGitHubリポジトリのセキュリティ
tsubakimoto_s
0
240
【AWS】CloudTrail LakeとCloudWatch Logs Insightsの使い分け方針
tsurunosd
0
120
Phase09_自動化_仕組み化
overflowinc
0
1.7k
Why we keep our community?
kawaguti
PRO
0
220
Featured
See All Featured
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
450
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
94
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
110k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
140
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.5k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8k
Fireside Chat
paigeccino
42
3.8k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.8k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Testing 201, or: Great Expectations
jmmastey
46
8.1k
Everyday Curiosity
cassininazir
0
180
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
160
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