English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Структура (struct) в Golang - это пользовательский тип, который позволяет группировать/комбинировать различные типы данных в один тип. Любой объект в реальном мире, у которого есть набор свойств/полей, можно представить как структуру. Этот концепт часто сравнивают с классами в面向 объектном программировании. Она может быть названа легким классом, который не поддерживает наследование, но поддерживает комбинирование.
Например, адрес имеет name, street, city, state, Pincode. Как показано ниже, эти три атрибута можно объединить в структуру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
код создаетпеременные, по умолчанию их значение устанавливается в ноль. Для структуры ноль означает, что все поля установлены в их соответствующие нулевые значения. Таким образом, поля name, street, city, state установлены в
Вы также можетеИспользование литерала структуры для инициализации переменных типа структуры.如下所示:
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() { //传递struct变量的地址 // 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 Возраст: 55