【Go言語】変数を寄せ集める! – Structs

2019年3月14日GoGo言語,Struct,構造体Go,Go言語,Struct,構造体

しばらくサボってしまいましたが、久しぶりに「A Tour of Go」を進めてみます。

今回の内容は Structs ということで構造体と呼ばれる概念ですね。C言語などにもある概念で、そこではオブジェクト指向でいう Class に近いものなんですが、Go言語ではどんな感じなんでしょうね?

Struct(構造体)とは?

フィールドの集合らしいです。

ここで言うフィールドってのは「変数」や「ポインタ」や「配列」それに「ファンクション」で、これらのグループをまとめたものがStructってことのようです。

Structの言語仕様は下記の通り。

Struct types
A struct is a sequence of named elements, called fields, each of which has a name and a type. Field names may be specified explicitly (IdentifierList) or implicitly (EmbeddedField). Within a struct, non-blank field names must be unique.

 

StructType = “struct" “{" { FieldDecl “;" } “}" .
FieldDecl = (IdentifierList Type | EmbeddedField) [ Tag ] .
EmbeddedField = [ “*" ] TypeName .
Tag = string_lit .

 

// An empty struct.
struct {}
// A struct with 6 fields.
struct {
x, y int
u float32
_ float32 // padding
A *[]int
F func()
}


https://golang.org/ref/spec#Struct_types

Structの書き方

基本になる書き方はこんな感じ。

// 構造体の定義
type <構造体の定義名> struct {
    <フィールド名> <型>
          :
          :
}


// 構造体を変数として扱うには
// ※フィールド名を指定しない場合は、定義した順番に引数があてがわれていく
<構造体の変数名> := <構造体の定義名> { <フィールドの値>, … }

// ※フィールド名を指定する場合は順番にとらわれずに書ける
<構造体の変数名> := <構造体の定義名> { <フィールド名>: <フィールドの値>, … }


// フィールドの値を扱うには
<構造体の変数名>.<フィールド名>  // 変数名にドット(.)つけてフィールド名を指定する

実際に使ってみる

構造体を実際に使ったサンプルプログラムを作ってみました。

今回進めたページ

今回は2ページ進行しました。

A Tour of Go - Structs
A Tour of Go – Structs
A Tour of Go - Structs Fields
A Tour of Go – Structs Fields

さいごに

簡単なプログラミングだとあまり使わない構造体ですが、色々なデータを扱う処理などでは便利に使えるはずです。

次回もStructの予定ですが、今度はポインタを使った応用ですね。