2013-03-05 2 views

ответ

4

В вашем примере shape является приемником. Можно даже написать это:

func (this *Shape) setAlive(isAlive bool) { 
    this.isAlive = isAlive 
} 
+0

s/текущий объект/приемник/ – zzzz

+0

* Вы могли *; но [просьба не делать этого] (https://github.com/golang/go/wiki/CodeReviewComments#receiver-names). «это», «я» и т. д. всегда были плохими идеями/именами, поэтому, пожалуйста, используйте их только тогда, когда вы застряли с языком, который заставляет вас это делать. –

6

декларации метод Go имеют так называемый приемник перед именем метода. В вашем примере это (shape *Shape). Когда вы звоните foo.setAlive(false)foo передается как shape в setAlive.

Так в основном следующий синтаксический сахар

func (shape *Shape) setAlive(isAlive bool) { 
    shape.isAlive = isAlive 
} 

foo.setAlive(false) 

для

func setAlive(shape *Shape, isAlive bool) { 
    shape.isAlive = isAlive 
} 

setAlive(foo, false) 
+0

'foo' _is not_ прошел 'как' shape'' для 'setAlive', но _pointer_ для' foo'. – zzzz

+0

Я имею в виду имя получателя, а не тип. – lukad

+1

@jnml: это правда, если 'foo' является' Shape'. но 'foo' может быть' * Shape' – newacct

Смежные вопросы