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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
95
testdata ディレクトリを活用しよう!
uji
1
370
MCP 公式の Go SDK で QA データ登録アシスタントを作ってみた
uji
0
150
Green Tea GCの動作を紙芝居にしてみる
uji
1
150
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
280
Goはブロックチェーン領域でなぜ使われ、どのように活躍しているのか
uji
1
790
Other Decks in Technology
See All in Technology
大規模ECサイトのあるバッチのパフォーマンスを改善するために僕たちのチームがしてきたこと
panda_program
1
250
CyberAgentの生成AI戦略 〜変わるものと変わらないもの〜
katayan
0
280
Goのerror型がシンプルであることの恩恵について理解する
yamatai1212
1
260
モジュラモノリス導入から4年間の総括:アーキテクチャと組織の相互作用について / Architecture and Organizational Interaction
nazonohito51
2
770
A Casual Introduction to RISC-V
omasanori
0
460
社内レビューは機能しているのか
matsuba
0
160
中央集権型を脱却した話 分散型をやめて、連邦型にたどり着くまで
sansantech
PRO
1
110
1GB RAMのラズピッピで何ができるのか試してみよう / 20260319-rpijam-1gb-rpi-whats-possible
akkiesoft
0
580
AWSの資格って役に立つの?
tk3fftk
2
370
Kiroで見直す開発プロセスとAI-DLC
k_adachi_01
0
100
ABEMAのバグバウンティの取り組み
kurochan
1
140
コンテキスト・ハーネスエンジニアリングの現在
hirosatogamo
PRO
6
600
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.1k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
110k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.3k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
85
Music & Morning Musume
bryan
47
7.1k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Odyssey Design
rkendrick25
PRO
2
550
Measuring & Analyzing Core Web Vitals
bluesmoon
9
790
Rebuilding a faster, lazier Slack
samanthasiow
85
9.4k
Side Projects
sachag
455
43k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
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