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
110
testdata ディレクトリを活用しよう!
uji
1
390
MCP 公式の Go SDK で QA データ登録アシスタントを作ってみた
uji
0
160
Green Tea GCの動作を紙芝居にしてみる
uji
1
180
Go Proverbs の紹介
uji
2
200
Go標準の暗号ライブラリメンテナンス戦略
uji
3
740
NOT A HOTEL TECH TALK ーSOFTWARE 3.0への道筋ー NEXT Web3 (2024-08-07)
uji
0
240
マネーフォワード ME ブロックチェーン連携機能におけるGoの活用方法
uji
1
300
Goはブロックチェーン領域でなぜ使われ、どのように活躍しているのか
uji
1
800
Other Decks in Technology
See All in Technology
要件定義の精度を高めるための型と生成AIの活用 / Using Types and Generative AI to Improve the Accuracy of Requirements Definition
haru860
0
310
Oracle Cloud Infrastructure:2026年4月度サービス・アップデート
oracle4engineer
PRO
0
380
小さいVue.jsを30分で作る
hal_spidernight
0
140
サービスの信頼性を高めるため、形骸化した「プロダクションミーティング」を立て直すまでの取り組み
stefafafan
1
250
QAエンジニアはどうやって プロダクト議論の場に入れるのか?
moritamasami
2
410
カオナビに Suspenseを導入するまで / The Road to Suspense at kaonavi
kaonavi
1
440
いつの間にかデータエンジニア以外の業務も増えていたけど、意外と経験が役に立ってる
zozotech
PRO
0
180
Shiny New Tools Won't Fix Your Problem
trishagee
1
110
自動テストだけで リリース判断できるチームへ - 鍵はテストの量ではなくリリース判断基準の再設計にあった / Redesigning Release Criteria for Lightweight Releases
ewa
7
3.5k
ハーネスエンジニアリング入門
hatyibei
0
110
(きっとたぶん)人材育成や教育のような何かの話
sejima
0
660
Oracle Exadata Database Service on Cloud@Customer X11M (ExaDB-C@C) サービス概要
oracle4engineer
PRO
2
8k
Featured
See All Featured
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
Are puppies a ranking factor?
jonoalderson
1
3.4k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
180
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
170
Building AI with AI
inesmontani
PRO
1
970
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.7k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
190
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
190
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
500
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.4k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
360
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