Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Goにおけるポインタの使いどころ
Search
uji
January 16, 2021
Technology
1.2k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Goにおけるポインタの使いどころ
uji
January 16, 2021
Transcript
10 slides
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
More Decks by uji
See All by uji
【Go ハンズオン】Windows / Linux コマンドを Go で再現
uji
1
130
testdata ディレクトリを活用しよう!
uji
1
520
MCP 公式の Go SDK で QA データ登録アシスタントを作ってみた
uji
0
200
Green Tea GCの動作を紙芝居にしてみる
uji
1
240
Go Proverbs の紹介
uji
2
250
Go標準の暗号ライブラリメンテナンス戦略
uji
3
800
NOT A HOTEL TECH TALK ーSOFTWARE 3.0への道筋ー NEXT Web3 (2024-08-07)
uji
0
290
マネーフォワード ME ブロックチェーン連携機能におけるGoの活用方法
uji
1
340
Goはブロックチェーン領域でなぜ使われ、どのように活躍しているのか
uji
1
840
Other Decks in Technology
See All in Technology
Agent Harnessはどう作る?事例から学ぶAI Agentの設計思想
sergicalsix
0
280
田んぼの見回りをIoTで減らしたい!水位監視から電池駆動カメラまでの試行錯誤
itosoft
1
120
BALLAS Technology Deck
ballas_inc
0
570
AWSを利用する上で知っておきたい名前解決の話 2026
nagisa53
5
3.5k
人間+AIを「チーム」としてプロセスを再設計する
littlehands
0
170
複数システムが同居した 15 年物の AWS アカウントを解体するための考古学
wa6sn
3
140
速くなった開発の効果をどう推し量るのか
bulbulpaul
0
110
生成AI時代のIAMのマニアックな話
takuros
6
3.2k
ゼロから作るWebアプリの新定番!?Amplify Gen 2 × AWS Blocksで実現する「開発速度とRDBの柔軟性のいいとこ取り」
amixedcolor
1
240
Sizing, Benchmarking and Performance Tuning Apache Flink Clusters
rmetzger
0
160
MCPでAIが自分で調べに行く
cdataj
0
170
Shared Signals Framework 仕様解説
oidfj
0
410
Featured
See All Featured
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
6
920
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.4k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
4
4.4k
Designing Experiences People Love
moore
143
24k
Designing for Performance
lara
612
70k
Practical Orchestrator
shlominoach
192
12k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
Optimizing for Happiness
mojombo
378
71k
[RailsConf 2023] Rails as a piece of cake
palkan
59
7.1k
Designing for Timeless Needs
cassininazir
1
560
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.9k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
630