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"
    }
}
相关推荐
谈谈叭10 分钟前
Javascript中的深浅拷贝以及实现方法
开发语言·javascript·ecmascript
lx学习11 分钟前
Python学习26天
开发语言·python·学习
大今野1 小时前
python习题练习
开发语言·python
爱编程的鱼1 小时前
javascript用来干嘛的?赋予网站灵魂的语言
开发语言·javascript·ecmascript
camellias_2 小时前
SpringBoot(二十三)SpringBoot集成JWT
java·spring boot·后端
tebukaopu1482 小时前
springboot如何获取控制层get和Post入参
java·spring boot·后端
昔我往昔2 小时前
SpringBoot 创建对象常见的几种方式
java·spring boot·后端
灭掉c与java2 小时前
第三章springboot数据访问
java·spring boot·后端
啊松同学2 小时前
【Java】设计模式——工厂模式
java·后端·设计模式
捕鲸叉2 小时前
C++设计模式和编程框架两种设计元素的比较与相互关系
开发语言·c++·设计模式