2015-01-23 3 views
0

하위 구조의 요소를 참조하는 방법을 파악하는 데 문제가 있습니다.하위 구조의 배열을 참조하는 데 골란 문제가 있음

참고 : 다음과 같은 http://play.golang.org/p/pamS_ZY01s

을 감안할 때 뭔가 .... 어떻게 방 구조체에 데이터를 참조합니까? fmt.Println(*n.Homes[0].Rooms[0].Size)을 시도했지만 작동하지 않습니다.

package main 

import (
    "fmt" 
) 

type Neighborhood struct { 
    Name string 
    Homes *[]Home 
} 

type Home struct { 
    Color string 
    Rooms *[]Room 
} 

type Room struct { 
    Size string 
} 

func main() { 
    var n Neighborhood 
    var h1 Home 
    var r1 Room 

    n.Name = "Mountain Village" 
    h1.Color = "Blue" 
    r1.Size = "200 sq feet" 

    // Initiaize Array of Homes 
    homeslice := make([]Home, 0) 
    n.Homes = &homeslice 

    roomslice := make([]Room, 0) 
    h1.Rooms = &roomslice 

    *h1.Rooms = append(*h1.Rooms, r1) 
    *n.Homes = append(*n.Homes, h1) 

    fmt.Println(n) 
    fmt.Println(*n.Homes) 

} 

답변

4

첫째, *[]Home 정말 낭비 코드 예제를 시작합니다. 슬라이스는 후드 아래에있는 3 개의 단어로 구성된 구조체로, 그 중 하나는 배열에 대한 포인터입니다. 거기에 이중 간접 참조가 도입되었습니다. This article on data structures in Go은 매우 유용합니다.

이제이 간접 참조 때문에 모든 포인터 투 표현식에 역 참조 연산자 *을 입력해야합니다. 이와 같이 :

fmt.Println((*(*n.Homes)[0].Rooms)[0].Size) 

그러나 실제로는 포인터를 꺼내십시오.

+0

죄송합니다. 잘못된 링크를 연결했습니다. 변경됨. –

+0

포인터의 이유는 데이터를 JSON에 마샬링 할 것이고, Google의 Andrew Gerrand가 JSON 데이터에 비어있는 요소가 표시되지 않도록 지시 한 이유입니다. – jordan2175

+3

그런데 참조가 아닌 Go 유형, 예를 들어. 지. JSON 객체를 구조체에 매핑하거나 JSON 번호를 int로 매핑합니다. 그러나 슬라이스 자체는 null이 아니며 null로 표시 될 수 있습니다. http://play.golang.org/p/psN_WIcCo4 –

관련 문제