同学,为什么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

posted @ 2020-12-15 17:13  JustDotNet  阅读(304)  评论(0编辑  收藏  举报