定義: これは集約データ型であり、任意の型の 0 個以上の値から集約されたエンティティです。
メンバー: 各値は構造体のメンバーと呼ばれます。
例:
典型的な構造例を使用して、会社の従業員情報を処理します。各従業員情報には、一意の従業員番号、従業員の名前、自宅住所、生年月日、役職、給与が含まれます。 、優れたリーダーシップなど。これらすべての情報はエンティティにバインドする必要があり、ユニット全体としてコピーしたり、パラメータや関数の戻り値として使用したり、配列に格納したりすることができます。
#構造の定義:
type Employee struct { ID int Name string Address string DoB time.Time Position string Salary int ManagerID int }
変数の定義:
var dilbert Employee
メンバーへのアクセス:
dilbert.Salary -= 5000
メンバーアドレスの取得:
position := &dilbert.Position *position = "Senior " + *positionドット演算子と構造体へのポインタ:
var employeeOfTheMonth *Employee = &dilbert employeeOfTheMonth.Position += " (proactive team player)"
メンバー定義の順序:
通常、1 行は 1 つの構造体メンバーに対応し、メンバーの名前が最初に、型が最後に来ます。ただし、隣接するメンバーの型が同じ場合は、名前と型と同様に、1 行にマージできます。以下のメンバーにアドレス指定します
type Employee struct { ID int Name, Address string DoB time.Time Position string Salary int ManagerID int }
メンバー命名規則:
構造体のメンバー名が大文字で始まる場合、メンバーはエクスポートされます。これは Go 言語によって決定されます。輸出ルール。構造体には、エクスポートされたメンバーとエクスポートされていないメンバーの両方が含まれる場合があります。 エクスポートの意味: 他のパッケージで読み書きできます。 S という名前の構造体型には、S 型のメンバーは含まれなくなります。これは、集計値にそれ自体を含めることができないためです。 (この制限は配列にも適用されます。) ただし、S 型の構造体には *S ポインター型のメンバーを含めることができるため、リンク リストやツリー構造などの再帰的なデータ構造を作成できます。type tree struct { value int left, right *tree }構造体の値: 各メンバーの値を指定できます。
type Point struct{ X, Y int } p := Point{1, 2}上記は最初の書き方で、構造体メンバーの定義順に各構造体メンバーの額面を指定する必要があります。
anim := gif.GIF{LoopCount: nframes}メンバー名と対応する値で初期化します。これには、一部またはすべてのメンバーを含めることができます。この形式の構造体額面の書き込みでは、メンバーが省略された場合、デフォルトでゼロ値が設定されます。メンバーの名前が提供されているため、メンバー全員が登場する順序は重要ではありません。 注: 2 つの異なる記述形式を混合することはできません。 構造の埋め込みと匿名メンバー:
type Point struct { X, Y int } type Circle struct { Center Point Radius int } type Wheel struct { Circle Circle Spokes int }各メンバーへのアクセス:
var w Wheel w.Circle.Center.X = 8 w.Circle.Center.Y = 8 w.Circle.Radius = 5 w.Spokes = 20簡素化された構造定義:
type Circle struct { Point Radius int } type Wheel struct { Circle Spokes int }自慢の匿名埋め込み機能にアクセスできます。フルパスを指定せずに直接リーフ属性を指定します:
var w Wheel w.X = 8 // equivalent to w.Circle.Point.X = 8 w.Y = 8 // equivalent to w.Circle.Point.Y = 8 w.Radius = 5 // equivalent to w.Circle.Radius = 5 w.Spokes = 20構造リテラルは、形状タイプが宣言されるときに構造に従う必要があるため、次の 2 つの構文のみを使用できます。これらは相互に排他的で同等です:
w = Wheel{Circle{Point{8, 8}, 5}, 20} w = Wheel{ Circle: Circle{ Point: Point{X: 8, Y: 8}, Radius: 5, }, Spokes: 20, // NOTE: trailing comma necessary here (and at Radius) }構造体タグ: 構造体宣言では、 Year メンバーと Color メンバーの後の文字列の額面が、次のように構造体メンバー Tag
type Movie struct { Title string Year int `json:"released"` Color bool `json:"color,omitempty"` Actors []string } var movies = []Movie{ {Title: "Casablanca", Year: 1942, Color: false, Actors: []string{"Humphrey Bogart", "Ingrid Bergman"}}, {Title: "Cool Hand Luke", Year: 1967, Color: true, Actors: []string{"Paul Newman"}}, {Title: "Bullitt", Year: 1968, Color: true, Actors: []string{"Steve McQueen", "Jacqueline Bisset"}}, // ... }になります。 データ構造は、 JSON 形式なので、両者間の変換は簡単です。 Go 言語の映画に似た構造であるスライスを JSON に変換するプロセスは、マーシャリングと呼ばれます。マーシャリングは、json.Marshal 関数を呼び出すことによって行われます:
data, err := json.Marshal(movies) if err != nil { log.Fatalf("JSON marshaling failed: %s", err) } fmt.Printf("%s\n", data)Marshal 関数は、空白インデントのない長い文字列を含むエンコードされたバイト スライスを返します。これを表示用にラップします:
[{"Title":"Casablanca","released":1942,"Actors":["Humphrey Bogart","Ingr id Bergman"]},{"Title":"Cool Hand Luke","released":1967,"color":true,"Ac tors":["Paul Newman"]},{"Title":"Bullitt","released":1968,"color":true," Actors":["Steve McQueen","Jacqueline Bisset"]}], 年のメンバー名はエンコード後に解放されるようになり、カラーメンバーはエンコード後に小文字で始まる色になりました。これは、配座メンバ Tag によって引き起こされます。構造体のメンバー Tag は、コンパイル段階でメンバーに関連付けられたメタ情報の文字列です:
Year int `json:"released"` Color bool `json:"color,omitempty"`構造体のメンバー Tag には任意の文字列リテラル値を指定できますが、通常はスペースで区切られた一連のキーです。キーと値のペアの「value」シーケンス。値には二重引用符が含まれるため、メンバー タグは通常、ネイティブ文字列リテラルの形式で記述されます。 go 言語の知識について詳しくは、
go 言語チュートリアル 列に注目してください。
以上がGo言語の構造を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。