go学习笔记(14)-基本语法-结构

本文介绍了Go语言中的结构体概念及其使用方式,包括结构体的创建、使用、值传递和指针传递的区别,以及如何利用结构体实现类似类的功能。此外还探讨了结构体的组合用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

结构

概念

  • Go 中没有 class 的概念,结构可以完成类似功能
  • 支持指向自身的指针类型成员
  • 支持匿名结构
  • 支持==和!=运算符

创建结构

格式

type <Name> struct{}

type person struct {
    name    string
    age     int
}

使用结构

结构变量的各个字段都会有默认值

p1 := person{name: "Jack"}
p1.name = "Peter"   //p1 {Peter 0}

值传递

参数中的结构默认为值传递

p2 := person{name: "Jack", age: 20}
changeAge(p2)
func changeAge(p person) {
    p.age = 99
    fmt.Println(p) //{Jack 99}
}
fmt.Println("p2", p2) //p2 {Jack 20}

可以通过使用指针改变原来的值

p2 := person{name: "Jack", age: 20}
changeAge(p2)
func changeAge2(p *person) {
    p.age = 99
    fmt.Println(p) //&{Jack 99}
}
fmt.Println("p2", p2) //p2 {Jack 99}

也可以在定义时直接使用指针

p3 := &person{name: "Andy"}

匿名结构

创建匿名结构

p4 := struct {
    name string
    age  int
}

也可以在定义时直接进行初始化,但是初始化的最后不能少掉逗号

p4 := struct {
    name string
    age  int
}{
    name: "Joe",
    age:  20, //不能少逗号
}

结构中也可以包括匿名结构

type person struct {
    name string
    age  int

    //匿名结构
    address struct {
        street string
    }
}

结构的组合

概念

由于 Go 没有类和继承的概念,所以要实现类似功能,需要使用组合,即一个结构中包含另一个结构的变量

定义一个组合
type person struct {
    name string
    age  int
}
type student struct {
    name string
    no   int
    person
}

以上在 student 结构中组合了一个 person结构,默认 student 会产生一个与此结构相同的成员
且组合的成员会直接添加到外部结构中

使用组合
stu := student{name: "Andy", no: 20, person: person{name: "Tony", age: 20}}
stu.person.age = 21
stu.age = 22
fmt.Println(stu) //{Andy 20 {Tony 22 }}

stu.name = "A"
stu.person.name = "B"
fmt.Println(stu) //{A 20 {B 22 {}}}

以上 stu.person.age 和 stu.age 实际操作的是同一变量,而 stu.person.name 和 stu.name 则为不同变量

转载于:https://www.cnblogs.com/doit2015/p/4340001.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值