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
testdata ディレクトリを活用しよう!
uji
1
350
MCP 公式の Go SDK で QA データ登録アシスタントを作ってみた
uji
0
140
Green Tea GCの動作を紙芝居にしてみる
uji
1
150
Go Proverbs の紹介
uji
2
170
Go標準の暗号ライブラリメンテナンス戦略
uji
3
720
NOT A HOTEL TECH TALK ーSOFTWARE 3.0への道筋ー NEXT Web3 (2024-08-07)
uji
0
220
マネーフォワード ME ブロックチェーン連携機能におけるGoの活用方法
uji
1
270
Goはブロックチェーン領域でなぜ使われ、どのように活躍しているのか
uji
1
780
標準パッケージ初のgenerics利用事例 "sync/atomic.Pointer"
uji
2
980
Other Decks in Technology
See All in Technology
技術選定 したい人 したくない人
shirayanagiryuji
0
320
Databricks (と気合い)で頑張るAI Agent 運用
kameitomohiro
0
160
AWS Bedrock Guardrails / 機密情報の入力・出力をブロックする — Blocking Sensitive Information Input/Output
kazuhitonakayama
2
160
LLMOpsのこれまでとこれからを学ぶ
nsakki55
2
670
Agent Payments Protocolで実装するAIエージェント間取引
tokio007
0
160
APMの世界から見るOpenTelemetryのTraceの世界 / OpenTelemetry in the Java
soudai
PRO
0
130
I tried making an AI manzai comedy act with "boke" and "tsukkomi" using Strands Agents
zzzzico
1
150
Generative UI を試そう!A2-UIでAIエージェントにダッシュボードを作らせてみた
kamoshika
1
290
Intro SAGA Event Space
midnight480
0
140
EKSで実践する オブザーバビリティの現在地
honmarkhunt
2
300
AWS CDK の目玉新機能「Mixins」とは / cdk-mixins
gotok365
2
220
Java ランタイムからカスタムランタイムに行き着くまで
ririru0325
0
110
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Git: the NoSQL Database
bkeepers
PRO
432
66k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
270
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.7k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
800
Automating Front-end Workflow
addyosmani
1371
200k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
460
Odyssey Design
rkendrick25
PRO
2
520
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
850
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