포인터가 아닌 값에 대한 포인터 메서드 호출
Go에서는 포인터가 아닌 값에 대해 포인터 메서드를 호출하는 것이 가능합니다. 포인터 메서드는 포인터에서만 호출할 수 있다는 일반적인 규칙입니다. 겉보기에 모순되는 이 동작은 자동 포인터 역참조 개념으로 설명할 수 있습니다.
주어진 코드 조각에서:
package main import "fmt" type car struct { wheels int } func (c *car) fourWheels() { c.wheels = 4 } func main() { var c = car{} fmt.Println("Wheels:", c.wheels) c.fourWheels() fmt.Println("Wheels:", c.wheels) }
c.fourWheels() 표현식은 (&c)의 약어입니다. .네바퀴(). 이는 fourWheels의 수신자가 포인터이고 c가 포인터가 아닌 값이기 때문입니다. c는 주소 지정이 가능하므로 컴파일러는 자동으로 이를 역참조하여 car 값에 대한 포인터를 얻은 다음 수신자로 사용됩니다.
이 동작은 Go 사양에 명시적으로 설명되어 있습니다.
x가 주소 지정 가능하고 &x의 메서드 세트에 m이 포함되어 있으면 x.m()은 (&x).m().
따라서 포인터 메서드에 대한 일반 규칙은 유효하지만 자동 포인터 역참조를 사용하면 특정 상황에서 포인터가 아닌 값에 대한 포인터 메서드를 편리하게 호출할 수 있습니다. 이 동작은 포인터 수신기가 있는 메서드에만 적용된다는 점에 유의하는 것이 중요합니다.
위 내용은 Go에서 포인터가 아닌 값에 대해 포인터 메서드를 호출할 수 있는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!