📑

GOを1から学ぶ #5

に公開

初めに

こんにちは!技術スタック的には、フロントよりですが、GOを学ぶ機会があったので、その記録を取りたいと思いこの記事を書いてます。(初心者のため優しい目で見てください)
今回は、以下について簡単にまとめます。

  • ポインタについて
  • new関数について
  • 構造体について

ポインタについて

ポインタとは、「変数が置かれている場所を覚えておくもの」 である。

ポインタにおけるイメージ

ポインタにおける簡単なイメージを以下にまとめる。

  • シェフ(プログラム)が料理を作る。
  • 材料(変数)を使って調理する。
  • ポインタは、「冷蔵庫の中の〇〇は、どこにあるか」を書いたメモ。
  • シェフは、そのメモ(ポインタ)を見て、材料のある場所を探しに行ける。
    つまり、ポインタがあれば、元の材料を直接変更できる!

基本的な構文

  • &変数名:その変数のアドレスを取得
  • *ポインタ変数:そのアドレスが指している値を取得または変更

具体的な例

package main

import "fmt"

func main() {
    var a int = 10
    var p *int = &a  // aのアドレスをpに格納(pはint型のポインタ)

    fmt.Println("aの値:", a)
    fmt.Println("aのアドレス:", &a)
    fmt.Println("pの値(aのアドレス):", p)
    fmt.Println("pが指している値(aの値):", *p)

    *p = 20  // ポインタを使ってaの値を変更
    fmt.Println("aの新しい値:", a)
}

実行結果
aの値: 10
aのアドレス: 0x4000016050
pの値(aのアドレス): 0x4000016050
pが指している値(aの値): 10
aの新しい値: 20

new関数について

Go言語のnew関数は、指定された型のゼロ値を持つポインタを返す関数。
簡単に言えば「その型の空っぽの箱を用意して、それを指す矢印(ポインタ)を返す」というイメージ。

基本的な構文

ptr := new(Type)
  • Type:作りたい型(例:int, string, structなど)
  • ptr:その型のポインタ(*Type)

具体的な例

package main

import "fmt"

func main() {
    numPtr := new(int) // int型のポインタを作る
    fmt.Println(*numPtr) // 0(int型のゼロ値)

    *numPtr = 42
    fmt.Println(*numPtr) // 42
}

実行結果
0
42

構造体について

構造体(struct)は、複数のデータをひとつにまとめたものである。

基本的な構文

type 構造体名 struct {
    フィールド名11
    フィールド名22
}

具体的な例

package main

import "fmt"

type Person struct {
    Name string
    Age  int
}

func main() {
    // 構造体の初期化(1):フィールド名を指定
    p1 := Person{Name: "Alice", Age: 30}
    fmt.Println(p1.Name) // "Alice"
    fmt.Println(p1.Age)  // 30

    // 構造体の初期化(2):フィールド名を省略
    p2 := Person{"Bob", 25}
    fmt.Println(p2)

    // 値の変更
    p1.Age = 31
    fmt.Println(p1.Age) // 31
}

実行結果
Alice
30
{Bob 25}
31

Discussion