专栏首页北漂的我Go语言方法的 值接受者 和 指针接受者 的区别

Go语言方法的 值接受者 和 指针接受者 的区别

首先说下结论

1. 无论方法的接受者是值接受者还是指针接受者,对象值调用该方法和对象指针调用该方法都是可行的。

2. 当方法接受者为指针接受者时,对象的值调用该方法和指针调用该方法都会操作对象本身。

3. 当方法接受者为值接受者时,对象的值调用该方法和指针调用该方法都会操作对象的副本,对对象本身无影响

package method

import "fmt"

type student struct {
	name string
	age  int8
}

func (student student) getName() string {
	student.name = "jack"
	return student.name
}

// 接受者为指针的方法
//func (student *student) getName() string {
//	student.name = "jack"
//	return student.name
//}

func (student student) getAge() int8 {
	student.age = 22
	return student.age
}

// 接受者为指针的方法
//func (student *student) getAge() int8 {
//	student.age = 22
//	return student.age
//}

func TestMethod() {
	s := student{name: "tom", age: 11}

	// 值调用方法
	//fmt.Println("age: ", s.getAge())
	//fmt.Println("name: ", s.getName())

	// 指针调用方法
	fmt.Println("age: ", (&s).getAge())
	fmt.Println("name: ", (&s).getName())

	// 查看调用方法后,对象本身的影响
	fmt.Println(s.age)
	fmt.Println(s.name)
	fmt.Println((&s).age)
	fmt.Println((&s).name)
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • go语言接受者的选取

    1.如果接受者是一个 map,func 或者 chan,使用值类型(因为它们本身就是引用类型)。 2.如果接受者是一个 slice,并且方法不执行 reslic...

    charlieroro
  • Golang 方法接收者为值与指针的区别

    Golang 中同时有函数和方法。方法是一个包含了接收者(receiver)的函数,receiver可以是内置类型或者自定义类型struct的一个值或者是一个指...

    Dabelv
  • Golang 语言 method 接收者使用值类型和指针类型的区别

    在 Golang 语言中,function 的参数和 method 的接收者都可以选择使用值传递和指针传递(“引用传递”),需要注意的是,其中指针传递是传递的指...

    frank.
  • Go语言中的方法、接口和嵌入类型详解

    概述 在 Go 语言中,如果一个结构体和一个嵌入字段同时实现了相同的接口会发生什么呢?我们猜一下,可能有两个问题: 1.编译器会因为我们同时有两个接口实现而报错...

    李海彬
  • Golang-接口(interface)

    最初的int、string、bool,再到稍微复杂的Array、Map、Slice。他们都称之为基础数据类型,以及到多维度符合类型的结构体。以及今日咱们所需要学...

    PayneWu
  • Go语言入门系列(七)之如何使用Go的方法?

    如果你用过面向对象的语言,比如Java,那你肯定对类、对象、成员变量、方法等很熟悉。

    二十二画程序员
  • 深度解密Go语言之关于 interface 的 10 个问题

    这次文章依然很长,基本上涵盖了 interface 的方方面面,有例子,有源码分析,有汇编分析,前前后后写了 20 多天。洋洋洒洒,长篇大论,依然有些东西没有涉...

    梦醒人间
  • go语言基础6-面向对象

    吐吐吐吐吐葡萄皮
  • 我的Go语言初体验

    只要了解这些底层的根本问题,你才会有持续的动力深入学习,而不是盲目跟风和三分钟热度。

    phoenix.xiao

扫码关注云+社区

领取腾讯云代金券