当前位置: 首页 > article >正文

4.1 Go结构体的指针

一、指针理解

在Go语言中,指针是学习结构体、方法和接口的基础,因为它们帮助你更高效地操作数据。简言之,指针是存储变量内存地址的变量。

  1. 指针本质是内存地址
    指针存储的是数据在内存中的位置。

  2. 指针值本质是uintptr类型的整数值
    指针值实际上是内存地址的数值化表示,底层是uintptr类型。

  3. 实际使用时必须通过具体指针类型操作
    具体指针类型确保类型安全,避免类型不匹配的问题。

有效的指针类型包括:

  • intstring[]T[N]T*struct等。

指针类型声明规范:

var (
    numPtr  *int        // 整型指针声明
    structPtr *User     // 结构体指针声明
    slicePtr *[]string  // 切片指针声明
)

正确的取址方式:

val := 42
ptr := &val  // 获取实例地址(注意:不是类型地址)

指针操作原则:

  • 类型约束原则:指针类型必须与所指向的对象类型严格匹配。
  • 实例化优先:禁止直接对类型取址(例如,&int是非法的),必须基于实例化的变量操作。
  • 显式解引用:通过*运算符访问目标对象的值(例如,ptr != *ptr)。

二、指针和类型的理解

指针和类型的理解

s2:=&Server{} //使用s2标识符记录实例&Server在内存中的地址。

//s2创建实例取地址

s2是指针,类型是*Server (指向Server的内存地址)

//s2是取的Server内存地址整数值,创建实例放在内存,s2是指针类型

package main

import "fmt"

type Server struct {
	Id       int
	Sn       string
	Ip       string
	Hostname string
}

func main() {
	s1 := Server{
		Id:       101,
		Sn:       "E9527",
		Ip:       "192.168.101.102",
		Hostname: "idc-beijing-xinglujianzhi-01-101",
	}
	//s2 := &s1 // 只能通过变量存储另一个变量的内存地址
	s2 := &Server{} //使用s2表示记录Server实例&Server 存放在内存的地址
	//S2是指针,类型是*Server (指向Server的内存地址)
	s2.Sn = "A9527"
	fmt.Println(s2.Sn)

	fmt.Println(s1)
}

s2是取的Server内存地址,创建实例存放在内存,s2是指针类型

Go中可以通过实例标识符进行修改成员,也可以通过实例指针来修改成员

& 是一个变量,他存储的是另一个变量的内存地址。

三、复制类型解释

如同数组一样,是值类型。

赋值时、传实参(形参定义为结构体)、返回值时(结构体类型),都发生了值复制。有了完全一样的副本


http://www.kler.cn/a/562275.html

相关文章:

  • Spring 原始注解详解与实战指南
  • VC++零基础入门之系列教程 【附录E MFC快速参考指南】
  • QT C++ QtConcurrent::run 异步任务 简单例子
  • Vue2+OpenLayers实现右键菜单功能(提供Gitee源码)
  • [深度学习]基于C++和onnxruntime部署yolov12的onnx模型
  • 全星FMEA软件系统是一款高效、智能的失效模式及影响分析工具,广泛应用于汽车、电子、机械等行业
  • 【论文带读(1)】《End-to-End Object Detection with Transformers》论文超详细带读 + 翻译
  • 什么是 OCP 数据库专家
  • 从头再来!社招找工作——算法题复习九:动态规划
  • 嵌入式开发:傅里叶变换(4):在 STM32上面实现FFT(基于STM32L071KZT6 HAL库+DSP库)
  • Linux与自动化的基础
  • 月之暗面改进并开源了 Muon 优化算法,对行业有哪些影响?
  • python 虚拟机的使用方式
  • 视频字幕识别和翻译
  • IP------PPP协议
  • FFMpegCore:.NET 中进行音视频处理解决方案
  • 快速入门——状态管理VueX
  • 数据安全_笔记系列07:数据泄露防护(DLP)(监控与阻断敏感数据外泄)深度解析
  • 【算法】滑动窗口(下)
  • 手撕FocalLoss