讲师中心 微信公众号
AI工具推荐 视频效率加速

Go语言结构体指针的声明与使用详解

大丽姑娘_3093

大丽姑娘_3093

发布时间:2025-11-15 22:55:02

|

765人浏览过

|

来源于php中文网

原创

go语言结构体指针的声明与使用详解

本文旨在清晰阐述Go语言中结构体指针的声明、初始化以及使用方法。通过多种示例代码,详细讲解了如何使用*和&操作符创建和操作指向结构体的指针,并深入探讨了接收器(receiver)在结构体方法中的应用,助你彻底理解Go语言中结构体指针的奥秘。

在Go语言中,结构体指针的使用是至关重要的。理解如何声明、初始化和操作结构体指针,对于编写高效且可维护的代码至关重要。本文将深入探讨结构体指针的各种用法,并通过示例代码进行详细说明。

结构体指针的声明与初始化

Go语言提供了多种方式来声明和初始化结构体指针。以下是一些常见的示例:

  1. 使用 new 关键字:

    立即学习“go语言免费学习笔记(深入)”;

    package main
    
    import "fmt"
    
    type Vertex struct {
        X, Y float64
    }
    
    func main() {
        var pv *Vertex
        pv = new(Vertex)
        pv.X = 4
        pv.Y = 2
        fmt.Println(pv)
    }

    在这个例子中,new(Vertex) 会分配一个新的 Vertex 类型的内存空间,并返回指向该内存空间的指针。 pv 是一个 *Vertex 类型的变量,它存储着这个指针。 也可以简写为:

    package main
    
    import "fmt"
    
    type Vertex struct {
        X, Y float64
    }
    
    func main() {
        var pv = new(Vertex)
        pv.X = 4
        pv.Y = 2
        fmt.Println(pv)
    }

    甚至更简洁:

    package main
    
    import "fmt"
    
    type Vertex struct {
        X, Y float64
    }
    
    func main() {
        pv := new(Vertex)
        pv.X = 4
        pv.Y = 2
        fmt.Println(pv)
    }
  2. 使用 & 操作符:

    package main
    
    import "fmt"
    
    type Vertex struct {
        X, Y float64
    }
    
    func main() {
        var pv = &Vertex{4, 2}
        fmt.Println(pv)
    }

    &Vertex{4, 2} 创建了一个 Vertex 类型的字面量,并返回指向该字面量的指针。这意味着我们直接初始化了结构体的值,并获得了指向该结构体的指针。 同样可以简写为:

    Go语言(Golang)1.26.0
    Go语言(Golang)1.26.0

    Go语言(Golang)1.26.0版本官方下载,版本号 1.26.0,适合旧项目维护、兼容性测试和指定版本开发环境搭建。

    下载
    package main
    
    import "fmt"
    
    type Vertex struct {
        X, Y float64
    }
    
    func main() {
        pv := &Vertex{4, 2}
        fmt.Println(pv)
    }

    这两种方法最终都会得到一个指向 Vertex 结构体的指针,并且可以通过该指针访问和修改结构体的字段。

结构体指针的访问

通过结构体指针访问结构体字段非常简单,可以使用 . 操作符。例如:

package main

import "fmt"

type Vertex struct {
    X, Y float64
}

func main() {
    pv := &Vertex{4, 2}
    fmt.Println(pv.X) // 输出 4
    pv.X = 10
    fmt.Println(pv.X) // 输出 10
}

即使 pv 是一个指针,我们仍然可以使用 pv.X 来访问 X 字段。Go语言会自动进行解引用操作,使得代码更加简洁易读。

接收器 (Receiver) 与结构体指针

在Go语言中,方法可以与特定的类型关联。当方法与结构体类型关联时,我们称之为接收器。接收器可以是值接收器或指针接收器。使用指针接收器可以修改结构体本身的值。

package main

import "fmt"

type Vertex struct {
    X, Y float64
}

func (v *Vertex) Move(x, y float64) {
    v.X = x
    v.Y = y
}

func main() {
    v := &Vertex{4, 2}
    fmt.Println(v)
    v.Move(42, 24)
    fmt.Println(v)
}

在这个例子中,Move 方法使用 *Vertex 作为接收器,这意味着 Move 方法可以修改 Vertex 结构体的 X 和 Y 字段。

注意事项:

  • 如果使用值接收器 (例如 func (v Vertex) Move(...)),那么 Move 方法只能修改 v 的副本,而不会影响原始的 Vertex 结构体。
  • 使用指针接收器可以避免在方法调用时复制整个结构体,从而提高性能,尤其是在处理大型结构体时。

总结

本文详细介绍了Go语言中结构体指针的声明、初始化和使用方法。通过使用 new 关键字或 & 操作符,我们可以创建指向结构体的指针,并通过指针访问和修改结构体的字段。此外,我们还探讨了接收器在结构体方法中的应用,并强调了使用指针接收器修改结构体本身的重要性。 掌握这些知识点,将有助于你编写更加高效、可维护的Go语言代码。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

相关专题

更多
golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

4994

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

5171

2025.07.04

C++ 智能指针与现代内存管理
C++ 智能指针与现代内存管理

深入讲解 C++ 现代内存管理的核心工具——智能指针,涵盖 unique_ptr 独占所有权语义、shared_ptr 引用计数机制与循环引用问题、weak_ptr 弱引用的应用场景、make_unique/make_shared 工厂函数的性能优势、自定义删除器的编写、RAII 资源管理思想的实践,以及从裸指针迁移到智能指针的重构策略,帮助开发者编写安全无泄漏的现代 C++ 代码。

379

2026.04.23

Go中Type关键字的用法
Go中Type关键字的用法

Go中Type关键字的用法有定义新的类型别名或者创建新的结构体类型。本专题为大家提供Go相关的文章、下载、课程内容,供大家免费下载体验。

3109

2023.09.06

go怎么实现链表
go怎么实现链表

go通过定义一个节点结构体、定义一个链表结构体、定义一些方法来操作链表、实现一个方法来删除链表中的一个节点和实现一个方法来打印链表中的所有节点的方法实现链表。

6207

2023.09.25

go语言编程软件有哪些
go语言编程软件有哪些

go语言编程软件有Go编译器、Go开发环境、Go包管理器、Go测试框架、Go文档生成器、Go代码质量工具和Go性能分析工具等。本专题为大家提供go语言相关的文章、下载、课程内容,供大家免费下载体验。

742

2023.10.13

0基础如何学go语言
0基础如何学go语言

0基础学习Go语言需要分阶段进行,从基础知识到实践项目,逐步深入。php中文网给大家带来了go语言相关的教程以及文章,欢迎大家前来学习。

7985

2023.10.26

Go语言实现运算符重载有哪些方法
Go语言实现运算符重载有哪些方法

Go语言不支持运算符重载,但可以通过一些方法来模拟运算符重载的效果。使用函数重载来模拟运算符重载,可以为不同的类型定义不同的函数,以实现类似运算符重载的效果,通过函数重载,可以为不同的类型实现不同的操作。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2916

2024.02.23

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

40

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn