欢迎访问宙启技术站
智能推送

Go语言5-结构体

发布时间:2023-05-15 13:24:36

一、结构体的定义

Go语言中结构体是一种自定义数据类型,跟C语言中的结构体定义类似,不过在Go语言中,结构体更像一个对象。

结构体定义语法如下:

type 结构体名 struct {

     成员名1 类型1

     成员名2 类型2

     //...

}

其中"成员名"和"类型"的定义跟变量定义类似,多个成员之间使用换行或逗号隔开。

例如,定义一个表示人的结构体:

type Person struct {

     Name string

     Age int

     Gender string

}

二、结构体的使用

定义结构体之后,我们就可以创建该类型的变量,给变量的成员赋值,使用结构体中的成员等。

1.创建结构体变量

创建结构体变量的常规方式是使用"var"关键字,并在其后跟结构体名,类似于变量声明。

例如:

var person Person

当然,也可以初始化结构体变量时对其成员进行初始化:

person := Person{Name:"张三", Age:18, Gender:"男"}

这会创建一个名为"person"的Person类型变量,并初始化其成员。

2.访问结构体成员

要访问结构体变量的成员,可以使用点"."操作符。

例如,访问上面的例子中"person"的名字:

name := person.Name

或者直接在结构体变量上使用"."操作符进行操作:

person.Name = "李四"

3.结构体的嵌套

结构体之间可以相互嵌套,形成更复杂的数据结构。

例如,定义一个表示城市的结构体:

type City struct {

     Name string

     Country string

     Population int

}

然后将City结构体作为Person结构体的一个成员:

type Person struct {

     Name string

     Age int

     Gender string

     City City

}

这时,我们可以通过person.City.Name来访问城市的名字。

三、结构体的匿名成员

结构体可以包含匿名成员(也称为嵌入类型),又可以称作"组合"。

例如,定义一个表示书籍的结构体:

type Book struct {

     Name string

     Author string

     Price float64

}

定义一个表示图书店的结构体,其中包含一个Book类型的匿名成员:

type BookStore struct {

     Book

     Address string

}

可以看到,BookStore中没有明确声明成员叫做"Book",但我们却可以通过BookStore访问其匿名成员。

例如,访问BookStore中的书名:

bookStore := BookStore{Book: Book{Name: "Go语言入门教程", Author: "张三", Price: 50.0}, Address: "北京市"}

name := bookStore.Name

可以看到,我们可以直接通过BookStore访问其成员Book,从而访问到Book的成员。

四、结构体的方法

结构体可以定义其自己的方法,类似于C++中的"类成员函数"。结构体方法的语法为:

func (s 结构体类型) 方法名 (参数列表) [返回值类型] {}

例如,为Person结构体定义一个方法,用来打印自己的基本信息:

func (p Person) PrintInfo() {

     fmt.Println("姓名:", p.Name)

     fmt.Println("年龄:", p.Age)

     fmt.Println("性别:", p.Gender)

}

然后可以通过以下方式调用该方法:

person := Person{Name: "张三", Age: 18, Gender: "男"}

person.PrintInfo()

可以看到,我们将person传入PrintInfo方法中,在方法中可以直接访问person的成员。

五、小结

本文介绍了Go语言中结构体的定义、使用、嵌套和方法等基本概念。结构体是一种重要的自定义数据类型,是组织和存储数据的一个重要方式。掌握结构体相关概念,可以提高Go语言程序设计的能力。