나는 "The Go Programming Language"라는 책을 읽었습니다. 우리 (오히려) 경험 많은 프로그래머에게는 매우 좋으며 다른 언어의 교차점에 대한 차이점을 설명합니다. 그러나 나는 완전히 이해하지 못하는 사례를 발견했습니다.struct 리터럴을 사용하십시오. 왜이 주소를 지정할 수 있습니까?
나는 C++이 충분히 훌륭하다는 것을 안다. Go 호출 (C++에서는 무엇이 호출 될 것인가) rvalues / xvalues "non-addressable"을 이해한다. "variables" [GOPL의 단어] 만 처리 할 수 있습니다.
괜찮아요. 말된다.
따라서 예를 들어,이 (*Point).ScaleBy
는 수신기 인수로 *Point
를 가져 와서 Point
리터럴 비 - 어 드레서 블이므로
Point{1, 2}.ScaleBy(2) // compile error: can't take address of Point literal
(처음 인쇄 페이지 (159)에 의한) 불법이다.
(이 책을 읽지 않았다면, Point
이 필드 X, Y float64
와 구조체이다. 그러나
, 162 페이지에, 우리는 분명히 유효하며 것이다
type ColoredPoint struct {
*Point
Color color.RGBA
}
p := ColoredPoint(&Point{1, 1}, red)
// ...more code ...
이 컴파일
질문 :.
두 번째 경우의 Point
리터럴에 주소 지정이 가능한 이유는 무엇입니까?
편의를 위해 특별한 경우입니까, 아니면 큰 그림에서 무엇인가 놓치고 있습니까?
나는 그것을 정말로 즐긴다! 나는 그것을 (다소 서둘러) 읽는다. 왜냐하면 나는 곧 풀 타임으로 Go 코드를 작성하는 직업에 착수 할 것이기 때문이다. 이 부분을 놓쳤을 것입니다. 나는 이것이 K & D와 함께 저기에 있다고 생각한다. 나는 K &R. ; -를 의미한다.) 다시 한번 감사드립니다! – Tobias