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"
    }
}
相关推荐
caimouse34 分钟前
ReactOS 图形系统分析(16):字符串对象 — STROBJ(string.c)
c语言·开发语言
Aphelios3801 小时前
一次锁内网络IO引发的Tomcat线程池“饿死”事故
java·开发语言·spring boot·elasticsearch·tomcat·网络io阻塞·线程池耗尽
不可求~1 小时前
C++ std::string_view 不是字符串:从悬空引用到安全用法
java·开发语言·c++
考虑考虑2 小时前
Excel导入时产生特殊字符处理
java·后端·java ee
90后小陈老师2 小时前
PHP 配置默认值失效排查实录:isset 兜底遇上表单空串回填,首页文案是怎么集体消失的
开发语言·php
IT_陈寒3 小时前
Redis的DEL命令竟然没删掉数据?我踩的这个坑你得知道
前端·人工智能·后端
用户938515635073 小时前
Docker + Nginx + Node.js:从“我的电脑能跑,你的电脑跑不了”到一键部署
后端·nginx·docker
陆枫Larry3 小时前
两步验证(2FA )到底是什么?
后端
JavaGuide3 小时前
我用 Claude Code/ZCode+GLM-5.3 从零做了一款 Agent 游戏!
前端·后端