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"
    }
}
相关推荐
小叶lr4 分钟前
python 从pycharm部署到新环境
开发语言·python·pycharm
R_.L6 分钟前
【项目】 :C++ - 仿mudou库one thread one loop式并发服务器实现(代码实现)
服务器·开发语言·c++
绝无仅有13 分钟前
Redis高级面试题解析:深入理解Redis的工作原理与优化策略
后端·面试·github
绝无仅有24 分钟前
Redis面试解答指南:了解Redis及其应用
后端·面试·github
Tiger_shl38 分钟前
【.Net技术栈梳理】08-控制反转(IoC)与依赖注入(DI)
开发语言·.net·.netcore
Tiger_shl39 分钟前
【.Net技术栈梳理】10-.NET Core 程序的执行
开发语言·.net·.netcore
王嘉俊9251 小时前
SpringBoot应用开发指南:从入门到高级配置与自动装配原理
java·spring boot·后端·spring·ssm
武子康1 小时前
大数据-96 SparkSQL 语句详解:从 DataFrame 到 SQL 查询与 Hive 集成全解析
大数据·后端·spark
薄荷撞~可乐1 小时前
C#高并发与并行理解处理
开发语言·c#
孤廖1 小时前
【算法磨剑:用 C++ 思考的艺术・Dijkstra 实战】弱化版 vs 标准版模板,洛谷 P3371/P4779 双题精讲
java·开发语言·c++·程序人生·算法·贪心算法·启发式算法