English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Ein Struktur (struct) in Golang ist ein vom Benutzer definiertes Typ, das das Gruppieren von möglicherweise verschiedenen Typen ermöglicht/kombiniert zu einem einzelnen Typ. Jedes Objekt in der realen Welt, das eine Gruppe von Attributen hat/Die physischen Entitäten der Felder können als Struktur dargestellt werden. Dieser Begriff wird oft mit der Klasse in der objektorientierten Programmierung verglichen. Es kann als ein leichter Klassen-Typ bezeichnet werden, der keine Vererbung unterstützt, aber Kombinationen unterstützt.
Zum Beispiel hat eine Adresse die Attribute name, street, city, state und Pincode. Wie folgt können diese drei Attribute zu einer Struktur kombiniert werdenAdressehat einen Sinn.
Strukturdeklaration:
type Adresse struct { name string street string city string state string Pincode int }
Dort,typeEin Schlüsselwort führt zu einer neuen Typdefinition. Danach folgt der Name des Typs (Adresse) und dem SchlüsselwortstructUm zu erläutern, dass wir eine Struktur definieren. Diese Struktur enthält eine Liste der Felder innerhalb der eckigen Klammern. Jedes Feld hat einen Namen und einen Typ.
注意:我们还可以通过组合相同类型的各个字段来使它们紧凑,如下例所示:
type Adresse struct { name, street, city, state string Pincode int }
定义结构:声明结构的语法:
var a Adresse
上面的代码创建一个Adresse-Typ的变量,默认情况下将其设置为零。对于结构,零表示所有字段均设置为其对应的零值。因此,字段name,street,city,state都设置为“”,而Pincode设置为0。
您还可以使用结构字面量来初始化结构类型的变量,如下所示:
var a = Adresse{"Akshay", "PremNagar", "Dehradun", "Uttarakhand", 252636}
注意:
始终以在结构中声明它们的顺序传递字段值。同样,您不能仅使用上述语法初始化字段的子集。
Go还支持名称:value语法,用于初始化结构(使用此语法时字段的顺序无关紧要)。而且,这仅允许您初始化字段的子集。所有未初始化的字段均设置为其相应的零值。
例如:
var a = Adresse{"Akshay", "PremNagar", "Dehradun", "Uttarakhand", 252636}
package main import "fmt" //定义结构类型 type Adresse struct { Name string city string Pincode int } func main() { //声明一个“struct”类型的变量 //初始化所有struct字段 //其值为零 var a Adresse fmt.Println(a) //声明和初始化 // struct使用结构文字 a1 := Adresse{"Akshay", "Dehradun",} 3623572} fmt.Println("Adresse1: ", a1) //在命名字段时 //初始化一个结构 a2 := Adresse{Name: "Anikaa", city: "Ballia",Pincode: 277001} fmt.Println("Adresse2: ", a2) //未初始化的字段设置为 //它们对应的零值 a3 := Adresse{Name: "Delhi"} fmt.Println("Adresse3: ", a3) }
输出:
{ 0} Adresse1: {Akshay Dehradun} 3623572} Adresse2: {Anikaa Ballia} 277001} Adresse3: {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() { //传递struct变量的地址 // emp8 emp8 := &Employee{ "Sam", "Anderson", 55, 6000} //* emp8, // emp8结构的firstName字段 fmt.Println("First Name:", (*emp8).firstName) fmt.Println("Age:", (*emp8).age) }
输出:
First Name: Sam Alter: 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 fmt.Println("First Name: ", emp8.firstName) fmt.Println("Age: ", emp8.age) }
输出:
First Name: Alter: 55