当前位置:实例文章 » 其他实例» [文章]go 笔记 第九章 结构体 struct 声明和使用

go 笔记 第九章 结构体 struct 声明和使用

发布人:shili8 发布时间:2024-11-17 09:29 阅读次数:0

**Go 笔记 - 第九章: 结构体 (struct) 声明和使用**

在 Go语言中,结构体(struct)是用户自定义的数据类型,它可以包含多个字段,每个字段都有一个特定的名称和类型。结构体是一种非常强大的数据类型,可以用来表示复杂的数据结构。

**9.1 结构体声明**

要声明一个结构体,我们使用 `type` 关键字,后面跟着结构体的名称和它的字段列表。每个字段都有一个名称和一个类型。

gotype Person struct {
 name string age int email string}


在上面的例子中,我们定义了一个名为 `Person` 的结构体,它包含三个字段:`name`、`age` 和 `email`。每个字段都有一个特定的名称和类型。

**9.2 结构体的访问**

要访问结构体中的字段,我们使用点运算符(.`)。

gopackage mainimport "fmt"

type Person struct {
 name string age int email string}

func main() {
 p := Person{
 name: "John",
 age:30,
 email: "john@example.com",
 }

 fmt.Println(p.name) // John fmt.Println(p.age) //30 fmt.Println(p.email) // john@example.com}


在上面的例子中,我们定义了一个 `Person` 结构体,并创建了一个 `p` 变量,类型为 `Person`。然后我们使用点运算符访问 `p` 的各个字段。

**9.3 结构体的初始化**

结构体可以通过多种方式进行初始化。

gopackage mainimport "fmt"

type Person struct {
 name string age int email string}

func main() {
 p1 := Person{
 name: "John",
 age:30,
 email: "john@example.com",
 }

 p2 := Person{
 name: "Alice",
 }
 p2.age =25 p2.email = "alice@example.com"

 fmt.Println(p1.name) // John fmt.Println(p1.age) //30 fmt.Println(p1.email) // john@example.com fmt.Println(p2.name) // Alice fmt.Println(p2.age) //25 fmt.Println(p2.email) // alice@example.com}


在上面的例子中,我们定义了两个 `Person` 结构体,分别是 `p1` 和 `p2`。我们使用结构体的字段列表进行初始化。

**9.4 结构体的嵌套**

结构体可以嵌套在其他结构体中。

gopackage mainimport "fmt"

type Address struct {
 street string city string}

type Person struct {
 name string age int email string addr Address}

func main() {
 p := Person{
 name: "John",
 age:30,
 email: "john@example.com",
 addr: Address{
 street: "123 Main St",
 city: "New York",
 },
 }

 fmt.Println(p.name) // John fmt.Println(p.age) //30 fmt.Println(p.email) // john@example.com fmt.Println(p.addr.street) //123 Main St fmt.Println(p.addr.city) // New York}


在上面的例子中,我们定义了一个 `Address` 结构体,并嵌套在 `Person` 结构体中。

**9.5 结构体的方法**

结构体可以定义方法。

gopackage mainimport "fmt"

type Person struct {
 name string age int}

func (p *Person) sayHello() {
 fmt.Println("Hello, my name is", p.name)
}

func main() {
 p := &Person{
 name: "John",
 age:30,
 }

 p.sayHello()
}


在上面的例子中,我们定义了一个 `sayHello` 方法,并将其绑定到 `Person` 结构体的指针类型。

**9.6 结构体的比较**

结构体可以使用 `==` 和 `!=` 运算符进行比较。

gopackage mainimport "fmt"

type Person struct {
 name string age int}

func main() {
 p1 := &Person{
 name: "John",
 age:30,
 }

 p2 := &Person{
 name: "John",
 age:30,
 }

 p3 := &Person{
 name: "Alice",
 age:25,
 }

 fmt.Println(p1 == p2) // true fmt.Println(p1 != p3) // true}


在上面的例子中,我们定义了三个 `Person` 结构体,并使用 `==` 和 `!=` 运算符进行比较。

**9.7 结构体的零值**

结构体的零值是所有字段都为零值的状态。

gopackage mainimport "fmt"

type Person struct {
 name string age int}

func main() {
 var p Person fmt.Println(p.name) // ""
 fmt.Println(p.age) //0}


在上面的例子中,我们定义了一个 `Person` 结构体,并创建了一个零值的实例。

**9.8 结构体的匿名字段**

结构体可以包含匿名字段。

gopackage mainimport "fmt"

type Person struct {
 name string age int Address}

func main() {
 p := &Person{
 name: "John",
 age:30,
 Address: Address{
 street: "123 Main St",
 city: "New York",
 },
 }

 fmt.Println(p.name) // John fmt.Println(p.age) //30 fmt.Println(p.street) //123 Main St fmt.Println(p.city) // New York}


在上面的例子中,我们定义了一个 `Person` 结构体,并包含匿名的 `Address` 字段。

**9.9 结构体的嵌套**

结构体可以嵌套在其他结构体中。

gopackage mainimport "fmt"

type Address struct {
 street string city string}

type Person struct {
 name string age int addr *Address}

func main() {
 p := &Person{
 name: "John",
 age:30,
 addr: &Address{
 street: "123 Main St",
 city: "New York",
 },
 }

 fmt.Println(p.name) // John fmt.Println(p.age) //30 fmt.Println(p.addr.street) //123 Main St fmt.Println(p.addr.city) // New York}


在上面的例子中,我们定义了一个 `Address` 结构体,并嵌套在 `Person` 结构体中。

**9.10 结构体的方法**

结构体可以定义方法。

gopackage mainimport "fmt"

type Person struct {
 name string age int}

func (p *Person) sayHello() {
 fmt.Println("Hello, my name is", p.name)
}

func main() {
 p := &Person{
 name: "John",
 age:30,
 }

 p.sayHello()
}


在上面的例子中,我们定义了一个 `sayHello` 方法,并将其绑定到 `Person` 结构体的指针类型。

**9.11 结构体的比较**

结构体可以使用 `==` 和 `!=` 运算符进行比较。

gopackage mainimport "fmt"

type Person struct {
 name string age int}

func main() {
 p1 := &Person{
 name: "John",
 age:30,
 }

 p2 := &Person{
 name: "John",
 age:30,
 }

 p3 := &Person{
 name: "Alice",
 age:25,
 }

 fmt.Println(p1 == p2) // true fmt.Println(p1 != p3) // true}


在上面的例子中,我们定义了三个 `Person` 结构体,并使用 `==` 和 `!=` 运算符进行比较。

**9.12 结构体的零值**

结构体的零值是所有字段都为零值的状态。

gopackage mainimport "fmt"

type Person struct {
 name string age int}

func main() {
 var p Person fmt.Println(p.name) // ""
 fmt.Println(p.age) //0}


在上面的例子中,我们定义了一个 `

其他信息

其他资源

Top