Golang 方法的接收器 receiver 指针和值的区别

news/2024/6/1 22:28:54 标签: golang, 开发语言, 后端

一、如果receiver是指针类型

package main

import "fmt"

type Count struct {
	count int
}

func main() {
	c := Count{count: 0}
	c.incr()
	fmt.Println(c.count)

	c2 := &c
	c2.incr()
	fmt.Println(c2.count)
}

func (c *Count) incr() {
	c.count++
}

//打印结果 1 2

incr 方法的 receiver 是 Count 类型的指针。因此,既可以使用 Count 类型的值,也可以使用指向 Count 类型的指针来调用 incr 方法

二、如果receiver是值传递

package main

import "fmt"

type Count struct {
	count int
}

func main() {
	c := Count{count: 0}
	c.incr2()
	fmt.Println(c.count)

	c2 := &c
	c2.incr2()
	fmt.Println(c2.count)
}

func (c Count) incr2() {
	c.count++
}

//打印 0 0
//为什么是 0,因为这时候c.count只是在incr2函数内部进行运算,c变量只有一种Count类型的函数内部变量,改变该值就需要通过把receiver改成指针传递

在 Go 语言中,如果一个方法的 receiver 是某个类型的指针,那么该类型的值和指针都可以调用这个方法。这是因为当 receiver 是指针类型时,Go 会自动进行指针解引用,以便让你方便地对这个类型的值进行操作。


http://www.niftyadmin.cn/n/5414422.html

相关文章

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Button)

按钮组件,可快速创建不同样式的按钮。 说明: 该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 可以包含单个子组件。 接口 Button Button(options: ButtonOptions) 创建可以包含单…

【Linux-tar/gzip/zip】

Linux-tar/gzip/zip ■ tar■ gzip■ zip■ unzip解压缩 ■ tar 基本语法: tar [选项] 压缩后的压缩包 要压缩的文件 选项说明描述-cf :对文件或文件夹进行打包-v :显示压缩的进度- z :使用gzip压缩工具把打包后的文件进行压缩为.gz-j :使用bzip2压缩工具把打包后…

webpack题

文章目录 1 webpack与grunt、gulp的不同?2 与webpack类似的工具还有哪些?谈谈你为什么最终选择(或放弃)使用webpack?3 有哪些常见的Loader?他们是解决什么问题的?4 有哪些常见的Plugin&#xff…

Oracle Essbase 多维库导入文件数据步骤操作

第一步: 先确定导入数据的维度数量(清楚自己需要导入什么数据和范围) 第二步: 设置加载的规则 1.创建规则 2.编辑规则-》打开数据文件 通过数据文件来确定加载规则的加载格式 先查看数据文件格式: 将数据文件导入&…

Verdin iMX8MP 调试串口更改

By Toradex胡珊逢 简介 Verdin iMX8M Plus 具有四个串口,其中 UART3 是用于 A53 核心上的系统如 Linux 的默认调试串口,出于设计需要可能需要将调试口换到其他串口,文章将介绍如何使用 UART1 作调试串口。 硬件介绍 Verdin iMX8M Plus 的四…

北斗垂莽苍 开闭天门路(二)

北斗垂莽苍 开闭天门路(二) 北斗是中华民族天文探索最原始和最朴素的记录坐标,无论是夜观星象、辨别方向的北斗,还是诗词歌赋中的北斗,耳熟能详的北斗承载了一代代中国人探索神秘宇宙星辰的梦想和寄托。以北斗作为品牌名称&#…

前端vue项目,引入PingFang SC字体

一,首先需要先获取PingFang SC字体,如果你有 请直接跳到第二步 链接:https://pan.baidu.com/s/1nkmV59kT_hvjK4yPJn1cJA 提取码:n0s1 二,将下载好的PingFang SC字体,放在项目的和样式一起的文件下,如下图 然后再创建一个fonts.scss文件(引入的时候注意路径是否正确)…

如何保证对外接口的安全?

文章目录 前言一、生成及校验Token1.1 生成Token1.2 校验Token1.3 SignUtil 签名工具类 前言 1.什么是安全接口? 通常来说要将暴露在外网的 API 接口视为安全接口,需要实现防篡改和防重放的功能。 1.1 什么是篡改问题? 由于 HTTP 是一种无状…