PREMIUM

Go言語入門 ポインタ編

Go言語におけるポインタの使い方について見ていきます。
0%

このレッスンをはじめる前に

このレッスンを進めるには前提知識が必要です。先に以下のレッスンを完了しておきましょう。

    • score := 70, メモリ上に領域を確保、70を格納、scoreの名前がつく
    • メモリ内の位置をあらわす番号、アドレス、0x300
    • アドレスを代入した変数、ポインタ、pScore
    • ポインタの基本的な記法
    • var pScore *int、変数宣言、ゼロ値はnil、アドレス未設定
    • pScore = &score、scoreのアドレスをpScoreに代入
    • *pScore、アドレスに格納された値にアクセス
  • #02 ポインタを使ってみよう (03:00) 無料公開中
    • 基本的な書き方とまとめて書く方法
    • var pScore *int、pScore = &score、基本的な書き方
    • pScore := &score、宣言から代入をまとめた書き方
    • scoreと*pScoreは70
    • &scoreとpScoreはアドレス
    • アドレスは16進数で表示、状況によって変わるので気にしない
    • *int、ポイントのデータ型を示す
    • *pScore、pScoreが参照している値にアクセスする
    • 活用方法を知るため、ポインタを使わないで実装
    • scoreに1を足してscoreに再代入して、表示する
    • 説明図を使い、前回の動きとポインタを使ったときの動きを確認
    • ポインタを使わない場合、値をコピーして、仮引数に渡す
    • ポインタを使う場合、値をコピーせず、アドレスを保持するポインタを用意して渡す
    • ポインタを使うと効率的にメモリを使うことができる
    • ポインタを使って書き換える
    • scoreのアドレスが入ったpScoreを宣言し、addScore()にpScoreを渡す
    • func addScore(pScore *int)とし、値を直接操作、返り値を削除、scoreへの再代入は不要に
    • addScore()に直接アドレスを渡し、addScore(&score)とすることも可能
    • ポインタと構造体、配列、スライス、マップなど大きなデータとの組み合わせを確認していく
    • 構造体のフィールドにアクセスする場合は、*不要、自動でデリファレンスされる
    • 配列でポインタを使う
    • 配列、スライス、マップのデータを用意、表示を確認
    • 配列の中にアクセスする場合は、*不要、自動でデリファレンスされる、構造体と同様
    • スライス、マップでポインタを使う
    • スライス、マップ自体がアドレスを保持しているポインタ
    • &不要、*不要、仮引数の*も不要
    • 構造体、配列は値そのものを保持
    • スライス、マップは値のアドレスを保持
    • ポインタを宣言、アドレス代入を忘れた際どうなるのか確認
    • nilが表示されるのではなく、エラーが表示される
    • デリファレンスの際にエラーが出ないように注意が必要
    • エラーにならないように、nilかどうかをチェックして条件分岐