同学,为什么Golang中不用this和self
本文主要内容包括:
1, 本文问题的由来
2, 答案
3, 解答
4, 安利两个网站
有小伙伴问Golang中为什么不使用this和self呢?
这个问题是这么出现的。有位熟练使用js的小伙伴,在和我讨论Golang的函数接收者的时候,面对这个代码:
说到:嗯,和js里的self是一个道理嘛,我们js里也有这种用法。简直一模一样。那么,为什么不使用this或者self呢?
为啥Golang里不适用this和self呢?因为官方不推荐啊
https://github.com/golang/go/wiki/CodeReviewComments#receiver-names:
翻译过来的意思是
1, 方法接收者应该是反应的它本身,不要使用me,this或者self
2, 方法接收者是一个参数
小伙伴又说了,这翻译了半天也没说明白,到底为啥不能用。方法接收者是一个参数又怎么了?
又开始划重点了:这就引出了Go的又一特性,Go的参数传递都是传值。具体看Dave大神的文章。
https://dave.cheney.net/2017/04/29/there-is-no-pass-by-reference-in-go
然后,我们看下面的代码,说明的更加清晰
首先31行代码处,p是函数的一个参数,这种写法只是go的一种语法糖
其次,函数里修改了Age,在函数外部并没有修改,没有得到体现。两次调用Say的打印是一样的。说明在这里参数是传值的。在外部的p和函数接收者person并不是同一Person,如果还叫作this,self就不合适了吧。那么我想修改Age应该怎么办呢,请传指针。
引用:
1 https://github.com/golang/go/wiki/CodeReviewComments#receiver-names
2 https://dave.cheney.net/2017/04/29/there-is-no-pass-by-reference-in-go