Golang 结构体

Golang 结构体

Golang中的结构是一种用户定义的类型,它允许将可能不同类型的项目分组/组合成一个单一的类型。任何现实世界中的实体都有一些属性/字段,可以用结构来表示。这个概念通常与面向对象编程中的类相比。它可以被称为轻量级的类,不支持继承但支持组合。

例如,一个地址有一个名称、街道、城市、州、Pincode。如下图所示,将这三个属性组合成一个单一的结构地址是有意义的。

声明一个结构

 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

上面的代码创建了一个地址类型的变量,默认设置为零。对于一个结构,零意味着所有的字段都被设置为相应的零值。因此,姓名、街道、城市、州等字段被设置为””,而Pincode被设置为0。

你也可以使用结构字来初始化结构类型的变量,如下所示。

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

注意

  • 传递字段值的顺序一定要与它们在结构中的声明顺序一致。另外,你不能用上述语法只初始化字段的子集。
  • Go也支持使用name: value语法来初始化结构(使用这种语法时,字段的顺序是不相关的)。这允许你只初始化一个子集的字段。所有未初始化的字段都被设置为相应的零值。

例子。

var a = Address{Name:”Akshay”, street:”PremNagar”, state:”Uttarakhand”, Pincode:252636} //city:””

// Golang program to show how to
// declare and define the struct
  
package main
  
import "fmt"
  
// Defining a struct type
type Address struct {
    Name    string
    city    string
    Pincode int
}
  
func main() {
  
    // Declaring a variable of a `struct` type
    // All the struct fields are initialized 
    // with their zero value
    var a Address 
    fmt.Println(a)
  
    // Declaring and initializing a
    // struct using a struct literal
    a1 := Address{"Akshay", "Dehradun", 3623572}
  
    fmt.Println("Address1: ", a1)
  
    // Naming fields while 
    // initializing a struct
    a2 := Address{Name: "Anikaa", city: "Ballia",
                                 Pincode: 277001}
  
    fmt.Println("Address2: ", a2)
  
    // Uninitialized fields are set to
    // their corresponding zero-value
    a3 := Address{Name: "Delhi"}
    fmt.Println("Address3: ", a3)
}

输出

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

如何访问结构的字段

要访问结构中的单个字段,您必须使用点(.)运算符。

例子

// Golang program to show how to
// access the fields of struct
package main
  
import "fmt"
  
// defining the struct
type Car struct {
    Name, Model, Color string
    WeightInKg         float64
}
  
// Main Function
func main() {
    c := Car{Name: "Ferrari", Model: "GTC4",
            Color: "Red", WeightInKg: 1920}
  
    // Accessing struct fields
    // using the dot operator
    fmt.Println("Car Name: ", c.Name)
    fmt.Println("Car Color: ", c.Color)
  
    // Assigning a new value
    // to a struct field
    c.Color = "Black"
      
    // Displaying the result
    fmt.Println("Car: ", c)
}

输出

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

指向结构的指针

Go编程语言或Golang中的指针是一个变量,用来存储另一个变量的内存地址。你也可以创建一个指向结构的指针,如下面的例子所示。

// Golang program to illustrate
// the pointer to struct
package main
  
import "fmt"
  
// defining a structure
type Employee struct {
    firstName, lastName string
    age, salary int
}
  
func main() {
  
    // passing the address of struct variable
    // emp8 is a pointer to the Employee struct
    emp8 := &Employee{"Sam", "Anderson", 55, 6000}
  
    // (*emp8).firstName is the syntax to access
    // the firstName field of the emp8 struct
    fmt.Println("First Name:", (*emp8).firstName)
    fmt.Println("Age:", (*emp8).age)
}

输出

First Name: Sam
Age: 55

Golang给了我们一个选项,使用emp8.firstName来代替显式的dereference (*emp8).firstName来访问firstName字段。下面是一个例子来说明这一点。

// Golang program to illustrate
// the pointer to struct
package main
  
import "fmt"
  
// Defining a structure
type Employee struct {
    firstName, lastName string
    age, salary         int
}
  
// Main Function
func main() {
  
    // taking pointer to struct
    emp8 := &Employee{"Sam", "Anderson", 55, 6000}
  
    // emp8.firstName is used to access
    // the field firstName
    fmt.Println("First Name: ", emp8.firstName)
    fmt.Println("Age: ", emp8.age)
}

输出

First Name:  Sam
Age:  55

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程