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
0
860
Goにおけるポインタの使いどころ
uji
January 16, 2021
Tweet
Share
More Decks by uji
See All by uji
Go標準の暗号ライブラリメンテナンス戦略
uji
3
440
NOT A HOTEL TECH TALK ーSOFTWARE 3.0への道筋ー NEXT Web3 (2024-08-07)
uji
0
120
マネーフォワード ME ブロックチェーン連携機能におけるGoの活用方法
uji
1
190
Goはブロックチェーン領域でなぜ使われ、どのように活躍しているのか
uji
1
630
標準パッケージ初のgenerics利用事例 "sync/atomic.Pointer"
uji
2
720
5分で完全理解するGoのiota
uji
11
6.3k
GoのGC (garbage collector)について理解する
uji
10
7k
シンプルなモック生成ツール matryer/moq 使ってみた
uji
0
530
goroutine で panic すると親プロセスをまきこんで落ちる
uji
0
1.8k
Other Decks in Technology
See All in Technology
RubyでKubernetesプログラミング
sat
PRO
4
160
メンバーがオーナーシップを発揮しやすいチームづくり
ham0215
2
140
Amazon Q Developerで.NET Frameworkプロジェクトをモダナイズしてみた
kenichirokimura
1
200
dbtを中心にして組織のアジリティとガバナンスのトレードオンを考えてみた
gappy50
0
280
三菱電機で社内コミュニティを立ち上げた話
kurebayashi
1
360
タイミーのデータ活用を支えるdbt Cloud導入とこれから
ttccddtoki
1
150
Oracle Base Database Service:サービス概要のご紹介
oracle4engineer
PRO
1
16k
あなたの人生も変わるかも?AWS認定2つで始まったウソみたいな話
iwamot
3
860
30分でわかる「リスクから学ぶKubernetesコンテナセキュリティ」/30min-k8s-container-sec
mochizuki875
3
450
Copilotの力を実感!3ヶ月間の生成AI研修の試行錯誤&成功事例をご紹介。果たして得たものとは・・?
ktc_shiori
0
350
Building Scalable Backend Services with Firebase
wisdommatt
0
110
re:Invent2024 KeynoteのAmazon Q Developer考察
yusukeshimizu
1
150
Featured
See All Featured
Visualization
eitanlees
146
15k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.9k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
Testing 201, or: Great Expectations
jmmastey
41
7.2k
Building an army of robots
kneath
302
45k
How GitHub (no longer) Works
holman
312
140k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
173
51k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
500
The World Runs on Bad Software
bkeepers
PRO
66
11k
Optimizing for Happiness
mojombo
376
70k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.4k
What's in a price? How to price your products and services
michaelherold
244
12k
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