Go语言结构体

文章目录

  • Go语言结构体
    • [1. **声明结构体**:](#1. 声明结构体:)
    • [2. **创建结构体实例**:](#2. 创建结构体实例:)
    • [3. **访问结构体字段**:](#3. 访问结构体字段:)
    • [4. **结构体的嵌套**:](#4. 结构体的嵌套:)
    • [5. **匿名结构体**:](#5. 匿名结构体:)
    • [6. **结构体方法**:](#6. 结构体方法:)
    • [7. 结构体指针:](#7. 结构体指针:)

Go语言结构体

在 Go 语言中,结构体(Struct)是一种用户自定义的复合数据类型,它允许您将不同的数据类型的字段组合在一起,以创建一个新的数据结构。结构体是一种非常有用的数据类型,用于表示对象、实体或数据记录。以下是关于 Go 语言结构体的基本概念和用法:

1. 声明结构体:

您可以使用 type 关键字来声明结构体。结构体由一组字段组成,每个字段都有一个名称和一个数据类型。

go 复制代码
type Person struct {
    FirstName string
    LastName  string
    Age       int
}

在上面的示例中,我们声明了一个名为 Person 的结构体,它有三个字段:FirstName、LastName 和 Age,分别表示名字、姓氏和年龄。

2. 创建结构体实例:

使用结构体类型的名称和字段值来创建结构体实例。

go 复制代码
p := Person{
    FirstName: "John",
    LastName:  "Doe",
    Age:       30,
}

这将创建一个名为 p 的 Person 结构体实例。

3. 访问结构体字段:

使用点运算符 . 可以访问结构体的字段值。

go 复制代码
fmt.Println(p.FirstName) // 输出 "John"
fmt.Println(p.Age)       // 输出 30

4. 结构体的嵌套:

结构体可以嵌套在其他结构体中,形成复杂的数据结构。这使得您可以创建层次化的数据结构。

go 复制代码
type Address struct {
    Street  string
    City    string
    Country string
}

type Contact struct {
    Email    string
    Phone    string
    Location Address
}

在上面的示例中,Contact 结构体嵌套了 Address 结构体。

5. 匿名结构体:

Go 支持匿名结构体,这是一种没有结构体类型名称的结构体。匿名结构体通常用于一次性数据结构的创建。

go 复制代码
contact := struct {
    Name  string
    Phone string
}{
    Name:  "Alice",
    Phone: "123-456-7890",
}

在上面的示例中,我们创建了一个匿名结构体,用于表示联系信息。

6. 结构体方法:

Go 语言支持为结构体定义方法。方法是与结构体关联的函数,允许您在结构体上执行操作。方法可以用于修改结构体的字段或执行其他操作。

go 复制代码
func (p *Person) GetFullName() string {
    return p.FirstName + " " + p.LastName
}

在上面的示例中,我们为 Person 结构体定义了一个方法 GetFullName,用于获取完整的姓名。

7. 结构体指针:

在 Go 语言中,您可以创建结构体指针,这些指针用于引用结构体的实例。结构体指针允许您在函数间传递结构体引用,以避免复制整个结构体。以下是关于结构体指针的基本概念和用法:

  1. 声明结构体指针:

    使用 * 符号声明一个结构体指针。例如,假设您有一个名为 Person 的结构体:

    go 复制代码
    type Person struct {
        FirstName string
        LastName  string
        Age       int
    }

    您可以声明一个指向 Person 结构体的指针如下:

    go 复制代码
    var personPtr *Person
  2. 创建结构体指针:

    使用 & 符号获取结构体实例的地址,并将其分配给结构体指针。例如:

    go 复制代码
    person := Person{
        FirstName: "John",
        LastName:  "Doe",
        Age:       30,
    }
    
    personPtr := &person

    这将创建一个指向 person 结构体实例的指针。

  3. 访问结构体字段:

    使用结构体指针来访问结构体字段。您可以使用 -> 符号来访问字段。

    go 复制代码
    fmt.Println(personPtr.FirstName) // 输出 "John"
    fmt.Println(personPtr.Age)       // 输出 30
  4. 通过指针修改结构体字段:

    您可以通过指针修改结构体的字段。对指针所指向的结构体字段的更改将在整个程序中反映出来。

    go 复制代码
    personPtr.Age = 31
    fmt.Println(person.Age) // 输出 31

    注意:由于 Go 语言的自动解引用,您可以像直接访问结构体字段一样访问和修改字段,而无需使用 -> 符号。

  5. 传递结构体指针给函数:

    您可以将结构体指针传递给函数,以便在函数内部修改结构体的字段,从而避免复制整个结构体。这对于在函数间传递结构体非常有用。

    go 复制代码
    func modifyPerson(p *Person) {
        p.Age = 32
    }
    
    modifyPerson(personPtr)
    fmt.Println(person.Age) // 输出 32

结构体指针是一种有助于避免数据复制并允许在函数间传递结构体引用的有用工具。在 Go 中,通常更常见的是通过传递结构体指针而不是结构体本身来处理结构体数据。

相关推荐
打工仔折腾 AI13 分钟前
从零写一个CAD 05:以鼠标为中心的滚轮缩放,招法能复用但顺序不能反
开发语言·后端·python·性能优化·计算机外设·swift·ai agent 实战
CarIise15 分钟前
Java实训阶段查漏补缺复习笔记1
java·开发语言·笔记
事圆则缓16 分钟前
Kotlin 泛型方差实战:out、in、星投影与类型擦除
android·开发语言·kotlin
Code_Solitude33 分钟前
c语言:二分法的完整补充
c语言·开发语言·算法
一切皆是因缘际会34 分钟前
掌控信息论:同源星际通信基础理论
人工智能·算法·ai
智鸟科技GemeOpen开发者智能设备40 分钟前
MQTT智能通断器GSCW1M2P · 开发者实战指南
开发语言·物联网·智能家居
青柠之夏cc1 小时前
前端拖拽功能原生实现,不引入拖拽库完成业务
开发语言·前端·python
ym hyd 1112 小时前
题库建立与考试系统源码 Java+SpringBoot+Vue3 前后分离
java·开发语言·vue.js·spring boot·毕设
OKkankan2 小时前
Python 高阶语法(一):高阶函数、闭包、lambda 与 functools——从底层真正理解装饰器
开发语言·python
geovindu2 小时前
rust: Facade Pattern
开发语言·后端·设计模式·rust·外观模式