いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Goメモ-20 (構造体, Structs, Tour of Go)

概要

Tour of Go の - Structs についてのサンプル。

tour.golang.org

Goの構造体はフィールドの集まりを表現します。

特に変な点はないですね。

普通に定義して普通に使います。

構造体に関しては、メソッドという概念があるのですが それはまた別の記事で。

定義する際は

type point struct {
    x, y int
}

としても

type (
    point struct {
        x, y int
    }
)

としてもどちらでもオッケイ。

サンプル

package tutorial

import "fmt"

// Struct は、 Tour of Go - Structs (https://tour.golang.org/moretypes/2) の サンプルです。
func Struct() error {
    // ------------------------------------------------------------
    // Go言語の構造体
    //
    // 構造体は、フィールドの集まりを表現する.
    // Go言語にて、構造体は type キーワード を利用して定義する.
    //
    // ちなみに、Go言語において struct{} は 「空構造体」 を表す
    // 空構造体はメモリを消費しない.
    // ------------------------------------------------------------
    type (
        point struct {
            x, y int
        }
    )

    //noinspection GoVarAndConstTypeMayBeOmitted
    var (
        // 構造体は、基本ポインタで扱うのが多い
        p1 = &point{x: 10, y: 20}
        p2 point  // 初期値を設定していない場合は、値はゼロ値となる
        p3 *point // ポインタの初期値は nil
    )

    // 文字列書式に %v をつけると 値 が表示される
    // %#v をつけると、値と型も表示される
    fmt.Printf("%#v\n", p1)

    // p1 は、ポインタであるため、普通は デリファレンス が必要となる
    // (*p1).x と記載しないといけないはず。
    // だが、この表記法は面倒なので、言語側で特殊措置をしてくれている
    // そのため、普通の値の場合と同様に, p1.x と書いてもちゃんと動く.
    fmt.Printf("x:%v\ty:%v\n", p1.x, p1.y)

    // 配列の実体は nil にはならない。(初期値は Zero Value となる)
    // ポインタの初期値は nil
    fmt.Printf("p2 is nil? => %v\tp3 is nil? => %v\n", p2, p3)

    return nil
}

try-golang/tutorial_gotour_14_struct.go at master · devlights/try-golang · GitHub

実行すると以下な感じ。

[Name] "tutorial_gotour_struct"
&tutorial.point{x:10, y:20}
x:10    y:20
p2 is nil? => {0 0}  p3 is nil? => <nil>

過去の記事については、以下のページからご参照下さい。

  • いろいろ備忘録日記まとめ

devlights.github.io

サンプルコードは、以下の場所で公開しています。

  • いろいろ備忘録日記サンプルソース置き場

github.com

github.com

github.com