English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Golang 基礎チュートリアル

Golang 制御文

Golang ファンクション & メソッド

Golang 構造体

Golang スライス & 配列

Golang 文字列(String)

Golang ポインタ

Golang インターフェース

Golang 并行

Golang エラ(Error)

Golang その他の雑多なもの

Go 言語の構造体(struct)

Golangの構造体(struct)はユーザー定義のタイプで、異なるタイプのアイテムをグループ化することができます/単一のタイプに組み合わせます。現実世界で属性のセットを持つ/フィールドのエンティティは構造体で表現できます。この概念は、面向オブジェクトプログラミングのクラスと比較されます。これは、継承をサポートしないが、組み合わせをサポートする軽量なクラスと呼ばれます。

例えば、住所にはname、street、city、state、Pincodeが含まれています。以下のように、これらの3つの属性を構造体として組み合わせますAddress意味があります。

構造体の宣言:

 type Address struct {
      name string 
      street string
      city string
      state string
      Pincode int
}

その上で、typeキーワードは新しいタイプを導入します。その後には、タイプの名前が(Address)およびキーワードstruct、構造体を定義していることを説明しています。この構造体には、大括弧内の各フィールドのリストが含まれています。各フィールドには名前とタイプがあります。

注意:以下のように、同じ型の各フィールドを組み合わせてコンパクトにすることができます:}}

type Address struct {
    name, street, city, state string
    Pincode int
}

構造体の定義:構造体の宣言文法:

var a Address

上記のコードは、以下を生成しますAddress型の変数は、デフォルトでゼロに設定されます。構造体の場合、ゼロはすべてのフィールドがそれぞれのゼロ値に設定されていることを意味します。したがって、フィールドname、street、city、stateは「」に、Pincodeは0に設定されます。

また、以下のように構造体の型の変数を構造文字で初期化する以下のように:

var a = Address{"Akshay", "PremNagar", "Dehradun", "Uttarakhand", 252636}

注意:

常に構造体で宣言された順序でフィールド値を渡します。また、上記の文法を使用してフィールドの一部を初期化することはできません。

Goは以下をサポートしています名称:value構造体の初期化に使用される文法(この文法を使用する場合、フィールドの順序は関係ありません)。また、これはフィールドの一部を初期化することを許可しています。未初期化のすべてのフィールドは、それぞれのゼロ値に設定されます。

例えば:

var a = Address{"Akshay", "PremNagar", "Dehradun", "Uttarakhand", 252636}
package main 
  
import "fmt"
  
//構造体型の定義
type Address struct { 
    Name    string 
    city    string 
    Pincode int
} 
  
func main() { 
  
        //「struct」型の変数を宣言する
        //すべてのstructフィールドを初期化する
        //その値はゼロです
    var a Address  
    fmt.Println(a) 
  
        //宣言と初期化
        // structを使用して構造文字
    a1 := Address{"Akshay", "Dehradun", 3623572} 
  
    fmt.Println("Address1: ", a1) 
  
        //フィールド名を指定する際に
        //構造体を初期化する
    a2 := Address{Name: "Anikaa", city: "Ballia",Pincode: 277001} 
  
    fmt.Println("Address2: ", a2) 
  
        //未初期化されたフィールドは、以下のように設定されます
        //それらのゼロ値
    a3 := Address{Name: "Delhi"} 
    fmt.Println("Address3: ", a3) 
}

出力:

{  0}
Address1:  {Akshay Dehradun} 3623572}
Address2:  {Anikaa Ballia} 277001}
Address3:  {Delhi  0}

構造体のフィールドにどうアクセスしますか?

アクセスするためにの構造体各フィールド、点を使用してアクセスする必要があります(.)演算子。

package main 
  
import "fmt"
  
//構造体の定義 
type Car struct { 
    Name, Model, Color string 
    WeightInKg         float64 
} 
  
func main() { 
    c := Car{Name: "Ferrari", Model: "GTC4", Color: "Red", WeightInKg: 1920} 
  
        //構造体のフィールドにアクセス
        //ポイント演算子を使用して
    fmt.Println("Car Name: ", c.Name) 
    fmt.Println("Car Color: ", c.Color) 
        //新しい値を代入
        //構造体のフィールドにポインタ
    c.Color = "Black"
      
    //結果を表示
    fmt.Println("Car: ", c) 
}

出力:

Car Name:  Ferrari
Car Color:  Red
Car:  {Ferrari GTC4 Black 1920}

構造体へのポインタ

Golangのポインタは、他の変数のメモリアドレスを格納する変数です。以下の例のように構造体へのポインタを作成することもできます:

// 構造体へのポインタ
package main 
  
import "fmt"
  
// 構造体を定義
type Employee struct { 
    firstName, lastName string 
    age, salary int
} 
  
func main() { 
  
        //構造体変数のアドレスを渡します
        // emp8はEmployee構造体へのポインタです
    emp8 := &Employee{"Sam", "Anderson", 55, 6000} 
  
        //(* emp8).firstNameはアクセスするための構文です
        // emp8のfirstNameフィールドの構造体
    fmt.Println("First Name:", (*emp8).firstName) 
    fmt.Println("Age:", (*emp8).age) 
}

出力:

First Name: Sam
Age: 55

Golangはemp8.firstNameではなく明示的にアンラップリング(* emp8).firstNameを使用してfirstNameフィールドにアクセスするオプションを示します。以下のように表示されます:

//構造体へのポインタ
package main 
  
import "fmt"
  
//構造体を定義
type Employee struct { 
    firstName, lastName string 
    age, salary         int
} 
  
func main() { 
  
    //構造体へのポインタを取得
    emp8 := &Employee{"Sam", "Anderson", 55, 6000} 
  
        // emp8.firstNameを使用してアクセス
        //フィールドfirstName
    fmt.Println("First Name: ", emp8.firstName) 
    fmt.Println("Age: ", emp8.age) 
}

出力:

First Name:  Sam
Age:  55