Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Go言語のポインタ

 Go言語のポインタ

2018年12月12日に開催された【とらのあな主催】オタクが最新技術を追うライトニングトークイベントのライトニングトーク資料です。

6ab47a68ee78e84c34731ce12333deff?s=128

虎の穴ラボ株式会社

December 13, 2018
Tweet

More Decks by 虎の穴ラボ株式会社

Other Decks in Programming

Transcript

  1. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 Go言語のポインタ 2018.12.12 オタクが最新技術を追うライトニングトークイベント 株式会社虎の穴 開発室 M.U

  2. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 今回話すこと 1. はじめに 2. Go言語のポインタ変数の宣言と参照 3. Go言語の値渡しと参照渡し 4.

    まとめ 2
  3. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 M.U • 2017年5月虎の穴入社 • Fantiaの運用/開発   主に使う言語 Ruby, JavaScript

    Java, Kotlin     Go(最近…) 3
  4. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 はじめに • 対象者はこれからGo始める中でポインタに慣れ ていない方(Go言語を最近はじめた方) • Go言語で開発するにはポインタは避けて通れな い。 4

  5. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 質問① Go言語を 「勉強したい」or「最近始めた」 5

  6. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 質問② Go言語触ってみて ポインタってやっぱり分からない 6

  7. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 Go言語でのポインタ 結果 ① ② ③ ④ 7

  8. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 Go言語でのポインタ 結果 8 普通の変数に&をつける 普通の変数のアドレスが見える ポインター変数に*をつける 普通の変数みたいに値が見える

  9. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 配列のポインタ 配列毎のアドレスを見る 結果 9

  10. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 ポインタを使うところってどこ? 10

  11. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 関数の値渡し 引数は値渡し 関数内でインクリメント 結果 11

  12. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 値渡しは変数をコピーしている main関数 age = 20 int型変数 birthday関数 age

    = 20 int型変数 age = 21 値(20)を代入している 関数内の値が21になっただけ 12
  13. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 関数のポインタ渡し 引数はポインタ型 *をつけて値をインクリメント 値ではなくアドレスを渡す 結果 13

  14. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 関数の引数にアドレス値を渡している main関数 age = 20 int型変数 birthday関数 0xc000012345

    ポインタ変数 age = 21 アドレスを代入 アドレスが指し示す値をインクリメント 0xc000012345 14
  15. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 おまけ Dockerのソースコードの一部を覗いてみる! dockerコマンドのmainパッケージ https://github.com/docker/docker-ce/blob/master/compone nts/cli/cmd/docker/docker.go 15

  16. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 まとめ • Go言語でのポインタの操作方法 • ポインターも変数の一種 • 大きな構造体や配列を扱う場合は参照渡し •

    DBのアクセスやネットワーク接続にはパッケージを利 用する場合が多い – パッケージの活用はポインタの理解が不可欠。 16