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

一、如果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 会自动进行指针解引用,以便让你方便地对这个类型的值进行操作。

相关推荐

  1. Golang 方法接收器 receiver 指针区别

    2024-03-12 00:04:05       38 阅读
  2. go中方法Receiver类型&指针类型)

    2024-03-12 00:04:05       46 阅读
  3. 引用指针区别

    2024-03-12 00:04:05       31 阅读
  4. 函数指针指针函数区别

    2024-03-12 00:04:05       35 阅读
  5. Golang中jsonjsoniter区别

    2024-03-12 00:04:05       59 阅读
  6. mysql null区别

    2024-03-12 00:04:05       42 阅读
  7. 初识GolangGolang结构体方法

    2024-03-12 00:04:05       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-12 00:04:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-12 00:04:05       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-12 00:04:05       82 阅读
  4. Python语言-面向对象

    2024-03-12 00:04:05       91 阅读

热门阅读

  1. vue知识点杂记

    2024-03-12 00:04:05       41 阅读
  2. 【美团20240309笔试算法题】小美的数组询问

    2024-03-12 00:04:05       43 阅读
  3. 【设计模式】工厂模式与抽象工厂模式

    2024-03-12 00:04:05       42 阅读
  4. FPGA TestBench编写学习

    2024-03-12 00:04:05       42 阅读
  5. Ubuntu 22.04 server 安装GNOME/XFCE/KDE桌面环境

    2024-03-12 00:04:05       44 阅读
  6. JVM相关面试题及常用命令参数

    2024-03-12 00:04:05       45 阅读
  7. 力扣代码学习日记七

    2024-03-12 00:04:05       43 阅读