go 方法传入指针

臭大佬 2020-11-20 18:16:44 2089
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