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"
    }
}
相关推荐
dreams_dream4 分钟前
Django序列化器
后端·python·django
懷淰メ6 分钟前
python3GUI--短视频社交软件 By:Django+PyQt5(前后端分离项目)
后端·python·django·音视频·pyqt·抖音·前后端
lsx20240610 分钟前
HTML 音频(Audio)详解
开发语言
woshihonghonga13 分钟前
【动手学深度学习】
开发语言·python
威风的虫24 分钟前
ES6 数组方法:告别循环,拥抱函数式编程
开发语言·前端·javascript
码界筑梦坊30 分钟前
240-基于Python的医疗疾病数据可视化分析系统
开发语言·python·信息可视化·数据分析·毕业设计·echarts
有意义35 分钟前
从零搭建:json-server+Bootstrap+OpenAI 全栈 AI 小项目
前端·后端·llm
2301_8035545241 分钟前
C++ 锁类型大全详解
开发语言·c++
wuwu_q1 小时前
用通俗易懂方式,详细讲讲 Kotlin Flow 中的 map 操作符
android·开发语言·kotlin
曼巴UE51 小时前
UE5 C++ Slate 画曲线
开发语言·c++·ue5