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
700
Goにおけるポインタの使いどころ
uji
January 16, 2021
Tweet
Share
More Decks by uji
See All by uji
マネーフォワード ME ブロックチェーン連携機能におけるGoの活用方法
uji
1
160
Goはブロックチェーン領域でなぜ使われ、どのように活躍しているのか
uji
1
550
標準パッケージ初のgenerics利用事例 "sync/atomic.Pointer"
uji
2
570
5分で完全理解するGoのiota
uji
10
5.5k
GoのGC (garbage collector)について理解する
uji
10
6.4k
シンプルなモック生成ツール matryer/moq 使ってみた
uji
0
450
goroutine で panic すると親プロセスをまきこんで落ちる
uji
0
1.4k
Google Chromeで始めるVim
uji
0
170
Other Decks in Technology
See All in Technology
VPoEの視点から見た、ヘンリーがサーバーサイドKotlinを使う理由 / Why Server-side Kotlin 2024
cho0o0
1
420
ABEMAにおけるLLMを用いたコンテンツベース推薦システム導入と効果検証
cyberagentdevelopers
PRO
1
750
ゆめみのアクセシビリティの現在地と今後
ryokatsuse
3
290
What if...? 처음부터 다시 LLM 어플리케이션을 개발한다면
huffon
0
1k
AOAI Dev Day - Opening Session
yoshidashingo
2
470
Azure AI ことはじめ
tsubakimoto_s
0
130
セキュリティ研修 Day1【MIXI 24新卒技術研修】
mixi_engineers
PRO
0
160
AWSサービスメニュー開発をしていてAWSを好きだ!と感じた瞬間
toru_kubota
0
130
E2Eテスト自動化プラットフォームにおけるAIの活用
shift_evolve
0
190
LLMアプリケーションの評価の実践と課題 ~PharmaXにおける今後の展望~
pharma_x_tech
2
170
JBUG岡山 #6 WordCamp男木島の チームビルディング
takeshifurusato
0
150
LINE WORKSへ簡単通知!Incoming Webhookアプリの紹介
mmclsntr
0
110
Featured
See All Featured
The Pragmatic Product Professional
lauravandoore
29
6.1k
What's in a price? How to price your products and services
michaelherold
239
11k
Product Roadmaps are Hard
iamctodd
PRO
48
10k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
36
9.1k
Docker and Python
trallard
37
2.9k
For a Future-Friendly Web
brad_frost
173
9.2k
10 Git Anti Patterns You Should be Aware of
lemiorhan
652
58k
A Philosophy of Restraint
colly
200
16k
What's new in Ruby 2.0
geeforr
338
31k
StorybookのUI Testing Handbookを読んだ
zakiyama
15
4.9k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
20
7.2k
Reflections from 52 weeks, 52 projects
jeffersonlam
346
19k
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