Golang 语法系列:结构体

结构体:相当于"类"

1.结构体声明

Go 复制代码
type [name] struct {
    [field_name] [field_type]
    [field_name] [field_type]
    ...
}

//例子:

type Person struct {
    name string
    age int
}

其中field_name可以省略

2.结构体的使用

  1. 格式1
Go 复制代码
var person Person
person.name = "jack"
person.age = 10

2)格式2:通过键值对声明

Go 复制代码
person := Person{
    name: "jack",
    age: 12,  // 这里的逗号要加
}

// name age字段可以省略

3)格式3:匿名结构体

Go 复制代码
person := Person{
    name string
    age int

}{
    name:"jack",
    age:12,
}

4)格式4:通过new()函数实例化

Go 复制代码
var person = new(Person)    //@doto new()返回的是结构体变量的地址
fmt.Println(&person)        //0xc000006028
fmt.Println(person)         //&{}

5)格式5:通过&运算符直接对结构体进行取地址操作,然后完成实例化

Go 复制代码
person := &Person{}
person.name = "xxx"

//@todo 说明:其实格式4,5,最合适的方式是通过 (*person).name = "xxx" 去赋值,只是Go语言自动帮助我们完成从地址取值的操作

3.结构体的构造方法

以上面的Person为例子,其实是通过一个函数来返回一个结构体指针实现的

Go 复制代码
func newPerson(name string, age int) *Person {
    return &Person {
        name: name,
        age: age,
    }
}

//main()方法中可以这样调用
p := newPerson("jack", 10)

4.结构体的方法(其实不限于结构体,比如可以为string添加)

通过接受者Receiver实现,方法的格式如下:

Go 复制代码
func (struct_var_name StructName) 函数名(params)(return_type) {
}

例子:

func (p Person) eat(food string) {
}

p := newPerson("jack", 10)
p.eat("鱼")

5.结构体的嵌套

Go 复制代码
type Person struct {
    name string
    age int
    bodyInfo BodyInfo
}

type BodyInfo struct {
    weight float64
    height float64
}

p := Person{
    name: "jack",
    age: 10,
    bodyInfo: BodyInfo{
        weight: 100
        height: 170
    }
}

p.bodyInfo.weight //@todo 访问嵌套结构体的属性

6. 结构体的继承

Go 复制代码
type Dog struct {
    age int
    animal *Animal
}

type Cat struct {
    age int
    animal *Animal
}

type Animal struct {
    name string
}

dog := &Dog{
    age: 12,
    animal: &Animal{
        name: "myDog"
    }
}
相关推荐
Mininglamp_2718几秒前
Vibe Coding 之后是 Vibe Operating?
后端·开源·多智能体·ai agent·mano-p
星哥的编程之路10 分钟前
别再调 API 就说自己会 RAG 了,看看真正的企业级 AI 智能体长什么样
后端·面试
长大198812 分钟前
C++26 静态反射完整实战:告别宏代码生成,一键实现序列化
后端
yb77914 分钟前
Java 21 虚拟线程最佳实践:虚拟线程如何让高并发 Java 服务更轻更快
后端
fliter17 分钟前
绕过系统 ICMP:用 rawsock、Npcap 和 WMI 找到默认网卡
后端
AHRIKNOW18 分钟前
AFaster:一个开箱即用的 Rust 高性能后端框架模板
后端
小强198819 分钟前
C++20 协程从入门到网络服务
后端
鱼人19 分钟前
C++ 内存模型详解:原子操作、内存屏障
后端
二月龙20 分钟前
RAII 与智能指针深度拆解
后端
极速蜗牛21 分钟前
我在 Taro 小程序项目里实践的 API First + AI 编程方式
前端·人工智能·后端