go中方法的Receiver (值类型指针类型)

在Go语言中,方法的接收者(Receiver)定义了该方法是与哪种类型的变量关联。方法的接收者可以是值类型也可以是指针类型,这决定了调用方法时是如何传递接收者的。

  1. 值类型与指针类型接收者
    值类型接收者
    当方法的接收者是值类型时,调用方法时使用的是接收者的一个副本。这意味着方法内对接收者的任何修改都不会影响到原始数据。
type MyStruct struct {Field int
}func (s MyStruct) SetValue(val int) {s.Field = val
}

在这个例子中,SetValue方法尝试修改MyStruct的Field字段。但因为SetValue是以值类型接收者定义的,所以它接收的是MyStruct实例的一个副本,对它的修改不会影响到原始实例。

指针类型接收者
当方法的接收者是指针类型时,调用方法时使用的是指向接收者的指针。这意味着方法可以直接修改接收者指向的原始数据。

func (s *MyStruct) SetValue(val int) {s.Field = val
}

如果使用指针类型接收者,SetValue方法就可以修改MyStruct实例的Field字段,因为它直接操作的是原始数据的指针。

  1. 值传递与指针传递

值传递
值传递意味着在调用函数或方法时,实际传递的是变量的副本。在Go语言中,当使用值类型接收者定义方法时,即使是结构体这样的较大对象,也是以值传递的形式调用的,接收者在方法调用过程中被复制。

指针传递
指针传递意味着传递的是指向变量的指针,而不是变量的副本。这允许函数或方法直接修改原始变量。在Go中,使用指针类型接收者定义方法时,是以指针传递的方式调用的,接收者是指向原始变量的指针。

使用建议
当你需要在方法中修改接收者指向的数据,或者接收者是一个大结构体时,使用指针类型接收者更为合适,因为这避免了不必要的数据复制。
当你的方法不需要修改接收者的数据,且想通过值传递来保证数据的不变性时,可以使用值类型接收者。
选择值类型还是指针类型接收者,取决于方法的具体需求以及是否需要修改接收者本身。通过合理选择,可以使代码更加高效且易于理解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/777518.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自然语言处理(NLP)基础:文本预处理与词嵌入

目录 1.引言 2.文本预处理步骤 3.文本预处理工具 4.词嵌入模型介绍与应用 4.1.Word2Vec 4.2.GloVe 4.3.应用示例 5.总结 1.引言 自然语言处理(Natural Language Processing, NLP)是计算机科学与人工智能领域的重要分支,旨在使计算机理…

ChatGPT 商业金矿(下)

原文:ChatGPT Business Goldmines 译者:飞龙 协议:CC BY-NC-SA 4.0 第十七章:ChatGPT 商业金矿#15:在线课程创建业务 随着人们寻求便捷灵活的学习新技能、推进职业或探索新爱好的方式,在线课程变得越来越受…

基于Redis实现延时任务

两种方案: Redis 过期事件监听Redisson 内置的延时队列 Redis 过期事件监听这种方案存在很多问题,建议使用 Redisson 内置的 DelayedQueue 方案。 Redis 过期事件监听实现延时任务原理 Redis 2.0 引入了发布订阅 (pub/sub) 功能。 在 pub/sub 模式下…

Mini-Gemini: Mining the Potential of Multi-modality Vision Language Models

Mini-Gemini: Mining the Potential of Multi-modality Vision Language Models 相关链接:arxiv 关键字:Vision Language Models、Multi-modality、High-Resolution Visual Tokens、High-Quality Data、VLM-guided Generation 摘要 在这项工作中&#x…

unity学习(76)--窗口化和后台运行

1.通过如下方式将编译的游戏设置为窗口模式。 成功: 2.现在只有鼠标点击的窗体游戏运动,其他窗体游戏都会卡住。 2.1build setting中 2.2unity内部Project Settings 也被同步修改了

火车头通过关键词采集文章的原理

随着互联网信息的爆炸式增长,网站管理员和内容创作者需要不断更新和发布新的文章,以吸引更多的用户和提升网站的排名。而火车头作为一款智能文章采集工具,在这一过程中发挥着重要作用。本文将探讨火车头如何通过关键词采集文章,以…

CDH集群hive初始化元数据库失败

oracle数据库操作: 报错如下:命令 (Validate Hive Metastore schema (237)) 已失败 截图如下: 后台日志部分摘录: WARNING: Use “yarn jar” to launch YARN applications. SLF4J: Class path contains multiple SLF4J binding…

Vite 为什么比 Webpack 快?

目录 1. Webpack 的构建原理 2. Script 的模块化(主流浏览器对 ES Modules 的支持) 3. Webpack vs Vite 开发模式的差异 对 ES Modules 的支持 底层语言的差异 热更新的处理 1. Webpack 的构建原理 前端之所以需要类似于 Webpack 这样的构建工具&…

主机安全-德迅卫士

什么是主机安全? 主机安全,其核心内容包括安全应用交付系统、应用监管系统、操作系统安全增强系统和运维安全管控系统。它的具体功能是指保证主机在数据存储和处理的保密性、完整性,可用性,它包括硬件、固件、系统软件的自身安全&…

CMakeLists生成动态库.so和静态库.a

一、下载NDK CMake - NDK : 26.2.11394342 或 23.1.7779620 - CMake : 3.22.1 二、新建android\app\CMakeLists.txt 文件CMakeLists.txt内容 cmake_minimum_required(VERSION 3.4.1) #mker为项目名称 project(mker)#设置生成的so动态库最后输出的路径 set(CMAKE_LIBRARY_OUTP…

如何安装OceanBase的OBD

选择一:借助 all-in-one 安装包安装 OBD(推荐) OceanBase 社区版的all-in-one安装包是一个集成了多种工具的一键式安装包。它包含了数据库软件本身,以及OBD、OBProxy、OBClient,自4.1版本起,还额外加入了O…

面试算法-122-翻转二叉树

题目 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1] 解 class Solution {public TreeNode invertTree(TreeNode root) {return dfs(…

第二证券今日投资参考:低空经济迎利好 自动驾驶商业化提速

昨日,两市股指盘中弱势震动,午后加快下探,沪指失守3000点大关,深成指、创业板指跌超2%;到收盘,沪指跌1.26%报2993.14点,深成指跌2.4%报9222.47点,创业板指跌2.81%报1789.82点&#x…

DC电源模块的设计与制造流程

BOSHIDA DC电源模块的设计与制造流程 DC电源模块是一种用于将交流电转换为直流电的设备。它广泛应用于各种电子设备中,如电子产品、工业仪器、电视等。下面是DC电源模块的设计与制造流程的简要描述: 1. 需求分析:在设计DC电源模块之前&#…

设计模式(一)简介

一、书籍推荐及博客 大话设计模式 设计模式的艺术 XXL开源社区 | 博客 二、通俗版概念 创建型模式、结构型模式、行为型模式 怎么建房子、建什么样的房子、建的房子有什么用 三、重点模式及简述 1、创建型模式 工厂方法(多态工厂的实现) 抽象工厂…

flutter 中 GetxController 和 GetxService 的区别和使用场景

区别: GetxController: GetxController 用于管理特定页面或 widget 的状态。每个页面或 widget 可以拥有一个或多个 GetxController,用于管理其自身的状态和逻辑。GetxController 是短暂存在的,通常与页面或 widget 的生命周期相关…

JetBrains pycharm pro 2023 for mac Python集成开发环境

JetBrains PyCharm Pro 2023 for Mac是一款功能强大的Python集成开发环境(IDE),专为Mac用户设计,旨在提供高效、智能的编程体验。 软件下载:JetBrains pycharm pro 2023 for mac中文最新版 PyCharm Pro 2023支持多种语…

上位机图像处理和嵌入式模块部署(qmacvisual图像修复)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 qmacvisual提供了一个图像修复的功能。所谓的图像修复,就是对图像中缺省的部分进行修补,它的操作,其实分成两个…

Leetcode 第 388 场周赛题解

Leetcode 第 388 场周赛题解 Leetcode 第 388 场周赛题解题目1:3074. 重新分装苹果思路代码复杂度分析 题目2:3075. 幸福值最大化的选择方案思路代码复杂度分析 题目3:3076. 数组中的最短非公共子字符串思路代码复杂度分析 题目4:…

IDEA跑Java后端项目提示内存溢出

要设置几个地方,都试一下吧: 1、默认是700,我们设置大一点(上次配置了这儿就解决了) 2、 3、 4、-Xmx4g