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