값으로 "this"를 전달하면 Go 메서드의 성능이 저하되나요?
값 전달 함수 인수가 상당한 성능을 발휘할 수 있는 C와 달리 변수 복사로 인한 페널티, Go의 메소드 수신자는 다른 패러다임을 따릅니다.
Go에서는 메소드 수신기는 단지 구문상의 편의일 뿐입니다. 아래에 설명된 대로:
type Something struct { Value int } func (s *Something) ChangeValue(n int) { s.Value = n } func main() { o := new(Something) fmt.Println(o.Value) // Prints 0 o.ChangeValue(8) // Changes o's value to 8 fmt.Println(o.Value) // Prints 8 (*Something).ChangeValue(o, 16) // Same as calling o.ChangeValue(16) fmt.Println(o.Value) // Prints 16 }
ChangeValue의 수신자 s는 포인터이므로 C의 참조와 유사합니다. 수신자가 값 유형인 경우 값 변경을 허용하지 않습니다.
따라서 Go의 포인터 수신자 접근 방식은 C/C에서 관찰되는 성능 저하와 달리 캡슐화를 보장하고 "this" 인스턴스 전체의 복사를 방지합니다. 값으로 인수를 전달합니다.
위 내용은 Go 메소드의 성능에 영향을 미치는 값으로 'this'를 전달합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!