【Go言語】構造体のポインタだったり初期化だったり… – Structs 2

【Go言語】構造体のポインタだったり初期化だったり… - Structs 2 - サムネイル IT

たいしたこと書いてない割には超亀進行なこのシリーズ…。そんなまったり進行なGo言語ですが、今回は、前回進めた Structs(構造体) の続きになります。

- PR -

まず構造体を定義する

進める前に適当な構造体がないと始まらんので…、簡単な定義を作ります。

Go
// 青いたぬきのスペックを定義してみる
type Doraemon struct {
  Height float32  // 身長
  Weight float32  // 体重
  Power float32   // ちから
} 
Expand

構造体の初期化とフィールド値の参照

この辺りは前回触れた内容と被る部分もあるんですが、新たに構造体のポインタなどにも触れつつ、改めて見直してみます。
ということで、簡単ですがサンプルプログラムを書いてみました。

Go
package main

import "fmt"

// 青いたぬきのスペックを定義してみる
type Doraemon struct {
  Height float32  // ①身長
  Weight float32  // ②体重
  Power float32   // ③ちから
}

// main
func main() {

  // 構造体を初期化し変数に割り当てる

  dora_a := Doraemon { 129.3, 129.3, 129.3 }  // フィールド定義の順番に合わせて初期化する値を引数で指定することができる ※省略不可

  dora_b := Doraemon { Weight: 129.3 } // ②の体重を指定して初期化することもできる ※未指定のフィールド値は0で初期化

  dora_c := Doraemon {} // 引数の指定がない場合は全て0初期化

  dora_p := &Doraemon { 129.3, 129.3, 129.3 } // 構造体名の戦闘に & をつけるとポインタが返る


  // dora_a の中身を出力する
  fmt.Printf("dora_a -> 身長:%.1f / 体重:%.1f / ちから:%.1f\n", dora_a.Height, dora_a.Weight, dora_a.Power)

  // dora_b の中身を出力する
  fmt.Printf("dora_b -> 身長:%.1f / 体重:%.1f / ちから:%.1f\n", dora_b.Height, dora_b.Weight, dora_b.Power)

  // dora_c の中身を出力する
  fmt.Printf("dora_c -> 身長:%.1f / 体重:%.1f / ちから:%.1f\n", dora_c.Height, dora_c.Weight, dora_c.Power)

  // dora_p の中身を出力する、ポインタの場合は (*<変数名>).<フィールド名> と書けるが…
  fmt.Printf("dora_p -> 身長:%.1f / 体重:%.1f / ちから:%.1f\n", (*dora_p).Height, (*dora_p).Weight, (*dora_p).Power)

  // 無駄に長くなるので、<変数名>.<フィールド名> が一般的らしい
  fmt.Printf("dora_p -> 身長:%.1f / 体重:%.1f / ちから:%.1f\n", dora_p.Height, dora_p.Weight, dora_p.Power)

}
Expand

Go Playground

今回進めたページ

今回は下記の2ページ分進めました。

A Tour of Go - Pointers to structs
A Tour of Go – Pointers to structs
A Tour of Go - Struct Literals
A Tour of Go – Struct Literals

さいごに

ほとんど前回進めた内容と被る感じですが、その点は…、まぁ、復習ってことで…_(:3」∠)_
でも、構造体のポインタについては初めて触れるものなので、記憶の片隅にでも残して置くようにします。(p_-)ミッカトモタナソウダガ…

コメント

タイトルとURLをコピーしました