首页 > 其他分享 >golang值接收者与指针接收者(一)

golang值接收者与指针接收者(一)

时间:2023-10-15 23:12:28浏览次数:36  
标签:st2 age 接收者 golang st1 Student 指针

golang方法的接收者有两种:值接收者与指针接收者。

平时使用中两种接收者的主要区别就是能不能修改接收者的内部值。

先说结论:值接收者方法不能修改结构体内部的值,指针接收者方法可以修改结构体内部的值。

做个测试:

type Student struct {
	age int
}

func (s Student) SetAge(age int) {
	s.age = age
}

func (s *Student) SetAge2(age int) {
	s.age = age
}

func main() {
    st1 := Student{}
	st2 := &Student{}
	st1.SetAge(11)
	fmt.Println("st11:", st1)
	st1.SetAge2(12)
	fmt.Println("st12:", st1)
	st2.SetAge(21)
	fmt.Println("st21:", st2)
	st2.SetAge2(22)
	fmt.Println("st22:", st2)
}    

  输出结果:

st11: {0}
st12: {12}
st21: &{0}
st22: &{22}

  可以看出,不论是指针接收者还是值接收者,对于指针方法和值方法,都可以调用。而且指针方法是可以修改接收者(结构体)的内部值,值方法则不行。

 

标签:st2,age,接收者,golang,st1,Student,指针
From: https://www.cnblogs.com/zxq89/p/17766429.html

相关文章

  • BST-Treap名次树指针实现板子 Ver2.0
    为了更好的阅读体验,请点击这里这里只有板子没有原理QWQ可实现1.插入x数2.删除x数(若有多个相同的数,只删除一个)3.查询x数的排名(排名定义为比当前数小的数的个数+1)4.查询排名为x的数5.求x的前驱(前驱定义为小于x,且最大的数)6.求x的后继(后继定义为大于x,且......
  • golang 并发之goroutine
    goroutine 的启动将要并发执行的任务包装成一个函数,调用函数时候前面加上go 关键字,就能够开启goroutine去执行该函数的任务 goroutine对应的函数执行完成,该goroutine就结束 程序启动的时候自动的创建一个goroutine去执行main函数main函数结束之后那么程序就该结束了,由该......
  • 解析“字符指针变量,数组指针变量,二维数组”
    1.字符指针变量字符指针变量是存放地址的charch='w'; char*pc=&ch; *pc='w';表达式的两个属性:【值属性】计算后的值是多少【类型属性】类型是什么注:hello是常量字符串,不能被修改,是连续存放的,可用printf("%s\n",p);打印字符串。常量字符串指的是在程序中声明的一个不......
  • C语言 通过union共存体释放常量指针指向的堆空间
    union共存体中所有成员占用相同的内存空间。因为free函数参数是void*,常量指针是constvoid*,所以free函数释放常量指针时会因类型不同而失败。#include<stdio.h>#include<malloc.h>#include<string.h>typedefunion_const_ptr{constvoid*cp;void*vp;}co......
  • Day2 前缀和 差分 双指针
    前缀和LuoguP2004领地选择二维前缀和板题,注意开longlong#include<iostream>#include<cstdio>#include<algorithm>usingnamespacestd;intn,m,c,x,y;longlongans,a[1005][1005],s[1005][1005];intmain(){ scanf("%d%d%d",&n......
  • C语言函数和指针的关系之三(完结)
     指针保存函数的地址(函数指针)1、函数指针的概念:咱们定义的函数,在运行程序的时候,会将函数的指令加载到内存的代码段。所以函数也有起始地址。c语言规定:函数的名字就是函数的首地址,即函数的入口地址咱们就可以定义一个指针变量,来存放函数的地址。这个指针变量就是函数指针变量......
  • golang map json 结构体
    要将JSON转换为Go结构体,您可以使用json.Unmarshal()函数。首先,您需要定义一个与JSON数据结构匹配的Go结构体,然后使用json.Unmarshal()将JSON数据解码为该结构体。以下是一个示例:假设有如下JSON数据:{"name":"JohnDoe","age":30,"email":"[email protected]"}......
  • Slime Escape (CF D) (贪心, 双指针最大有效权值单调增长)
     补充:每次操作可以往左或者右走一步 思路:性质:以一边为重点使劲走,然后利用另外一边来给自己权值变大当这边要死了,就把这边回退到最大值,在走另一边,看另一边能到哪,这样每次都可以扩展最大值,于是利用双指针?也不是双指针,就是l,r分别贪心地向左和......
  • golang之异步队列Asynq
    Asynq[1]是一个Go实现的分布式任务队列和异步处理库,基于redis,类似Ruby的sidekiq[2]和Python的celery[3]。Go生态类似的还有machinery[4]和goworker同时提供一个WebUI asynqmon[5],可以源码形式安装或使用Dockerimage,还可以和Prometheus集成dockerrun--rm--nameasynqmon......
  • 力扣18:四数之和(双指针+剪枝)
    给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a],nums[b],nums[c],nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):0<=a,b,c,d <na、b、c 和 d 互不相同nums[a]+nums[b]......