阅读 485

Go 语言结构体(struct)

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

例如,一个地址具有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

上面的代码创建一个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() { 
  
        //传递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: SamAge: 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:  SamAge:  55


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐