大白话!go语言中的指针、指针类型的方法接收器

go语言中的指针使用起来的比较简单。应用如下:

1.普通的对象取地址,获取对象值
  • 符号&,取地址符,可以取变量的地址,或结构体对象的地址等。
  • 符号* ,是从地址中取值(根据栈中存储地址,从堆中获取映射的值
Go 复制代码
var a int
p := &a
v := *p
2.方法中的指针类型的接收器

举个例子先:

Go 复制代码
func (p *Point) ScaleBy(factor float64) {
    p.X *= factor
    p.Y *= factor
}

注意: go中的只有值传递,传递指针也是传递的指针的具体内容,比如0X5d544d

上面例子中方法的接收者是指针类型,不管是指针类似还是非指针类型的接收者 ,都是可以通过指针/非指针类型进行调用的,编译器会帮你做类型转换。

在声明一个method的receiver该是指针还是非指针类型时,需要考虑两个方面的因素:

(1)这个对象本身是不是特别大,如果声明为非指针变量时,调用会产生一次拷贝;

(2)如果你用指针类型作为receiver,那么你一定要注意,这种指针类型指向的始终是一块内存地址,就算你对其进行了拷贝。

非指针类型每一次的传递是值拷贝,如果对象过大,开销会变大。

那什么时候用指针对象作为接收器,什么时候用非指针对象作为接收器呢?

当涉及到对原对象内容修改对象,使用同一个对象的值的时候,使用指针接收者。对于指针,go会帮我们隐式的解引用。不需要取地址等等。

Go 复制代码
type Stu struct {
	Name string
	Age int
}

func TestDefer(t *testing.T) {
	s := &Stu{
		Name: "zhangsan",
		Age: 18,
	}	
	// go语言中自动解引用。
	fmt.Println("name:",s.Name)
	fmt.Println("age:",s.Age)
	
}
相关推荐
吃西瓜的年年11 分钟前
1. 初识C语言
c语言·开发语言
CHANG_THE_WORLD37 分钟前
Python 字符串全面解析
开发语言·python
不会c嘎嘎1 小时前
深入理解 C++ 异常机制:从原理到工程实践
开发语言·c++
狂炫冰美式1 小时前
不谈技术,搞点文化 🧀 —— 从复活一句明代残诗破局产品迭代
前端·人工智能·后端
永远都不秃头的程序员(互关)1 小时前
C语言 基本语法
c语言·开发语言
永远都不秃头的程序员(互关)2 小时前
Java核心技术精要:高效实践指南
java·开发语言·性能优化
databook2 小时前
数据会说谎?三大推断方法帮你“审问”数据真相
后端·python·数据分析
是Dream呀2 小时前
Python圣诞特辑:打造一棵会唱歌、会下雪的魔法圣诞树
开发语言·python·pygame
未来之窗软件服务2 小时前
幽冥大陆(四十一)美萍V10酒店门锁SDK C#语言仙盟插件——东方仙盟筑基期
开发语言·c#·仙盟创梦ide·东方仙盟·东方仙盟sdk·酒店智能门锁·东方仙盟 vos 智能浏览器
代码栈上的思考2 小时前
深入解析Spring IoC核心与关键注解
java·后端·spring