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
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
330
MCP 公式の Go SDK で QA データ登録アシスタントを作ってみた
uji
0
140
Green Tea GCの動作を紙芝居にしてみる
uji
1
140
Go Proverbs の紹介
uji
2
170
Go標準の暗号ライブラリメンテナンス戦略
uji
3
710
NOT A HOTEL TECH TALK ーSOFTWARE 3.0への道筋ー NEXT Web3 (2024-08-07)
uji
0
210
マネーフォワード ME ブロックチェーン連携機能におけるGoの活用方法
uji
1
270
Goはブロックチェーン領域でなぜ使われ、どのように活躍しているのか
uji
1
770
標準パッケージ初のgenerics利用事例 "sync/atomic.Pointer"
uji
2
970
Other Decks in Technology
See All in Technology
システムのアラート調査をサポートするAI Agentの紹介/Introduction to an AI Agent for System Alert Investigation
taddy_919
2
1.5k
AI時代、1年目エンジニアの悩み
jin4
1
150
制約が導く迷わない設計 〜 信頼性と運用性を両立するマイナンバー管理システムの実践 〜
bwkw
2
810
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
6
67k
(金融庁共催)第4回金融データ活用チャレンジ勉強会資料
takumimukaiyama
0
110
データ民主化のための LLM 活用状況と課題紹介(IVRy の場合)
wxyzzz
2
640
Amazon S3 Vectorsを使って資格勉強用AIエージェントを構築してみた
usanchuu
3
420
GitHub Issue Templates + Coding Agentで簡単みんなでIaC/Easy IaC for Everyone with GitHub Issue Templates + Coding Agent
aeonpeople
1
130
usermode linux without MMU - fosdem2026 kernel devroom
thehajime
0
210
AIとともに歩む情報セキュリティ / Information Security with AI
kanny
4
3.2k
ファインディの横断SREがTakumi byGMOと取り組む、セキュリティと開発スピードの両立
rvirus0817
1
990
Introduction to Bill One Development Engineer
sansan33
PRO
0
360
Featured
See All Featured
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
110
Rails Girls Zürich Keynote
gr2m
96
14k
New Earth Scene 8
popppiees
1
1.5k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
140
ラッコキーワード サービス紹介資料
rakko
1
2.2M
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
190
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
280
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
350
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
Claude Code のすすめ
schroneko
67
210k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
62
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