这称为“接收器”。第一种情况
(h handler)是值类型,第二种
(s*GracefulServer)情况是指针。Go的工作方式可能与某些其他语言有所不同。但是,在大多数面向对象的编程中,接收类型或多或少像一个类。这是您从中调用方法的事情,就像如果我将某个方法
A放在某个类的旁边,
Person那么我将需要一个类型的实例
Person来进行调用
A(假设它是一个实例方法,而不是静态的!)。
这里有一个问题是,接收器获取的情况下被推到像其他参数调用堆栈,所以如果接收者是一个值的类型,比如handler
,你将在的东西拷贝一起工作你的意思是这样调用的方法`h.Name
“Evan”`会返回调用范围后无法持久保存。出于这个原因,任何希望改变接收器状态的事物都需要使用指针或返回修改后的值(如果您正在寻找更多的不可变类型范例,则可以使用)。
这是规范中的相关部分;https://golang.org/ref/spec#Method_sets



