go 方法传入指针
简介
go 方法传入指针
问题
在 go 中,经常看到方法传递的参数中带有 * ,也就是指针。例如:
func (base *BaseController) IsPost() bool {
return base.Ctx.Request.Method == "POST"
}
上面的栗子中:base *BaseController
用到了指针变量。
这是因为 Go 语言面向对象编程不像 PHP、Java 那样支持隐式的 this 指针,所有的东西都是显式声明的。
如果要在方法中对变量成员修改,并且作用到该函数域外,就需要传入指针类型(结构体是值类型,不是引用类型,所以需要显式传入指针)。
如果在方法中,不需要对类的成员变量进行修改,就不需要传入指针。
举个PHP的栗子,有助于理解:
<?php
function test(&$p)
{
$p = 4;
}
$p = 2;
test($p);
echo $p;
// 这里会输出 4
上面的栗子修改了传递控制器的策划成员 base.Ctx.Request.Method
。