刚刚得到关于此代码的基本Go问题:
type Ips []string
func (a Ips) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
我相信(a Ips)
是Swap函数的参数,但为什么它不能在括号内?
答案 0 :(得分:1)
a Ips
是该方法的接收者。其参数为i int
和j int
。这是绑定到Ips
类型的方法,数组中的两个字符串并不返回任何内容。
答案 1 :(得分:0)
(a Ips)
被称为'接收者'。它是调用该方法的类型。事实上,它在任何其他参数中传递给方法(回想一下他们谈论在堆栈上推送参数的那个类)。在这种情况下,它是一个值类型,因此与用作参数的其他值类型一样,会生成参数的副本,然后是在堆栈上推送的内容。这也意味着当方法返回并且弹出堆栈时它将超出范围。
主要区别在于您需要一个接收类型的实例才能调用该方法。如果方法没有接收类型,那么它就是封装的作用域,可以在包内的任何地方调用,或者,如果导出,可以从导入的包别名中调用。