2013-02-11 2 views
1

나는이 코드가 작동 할 것으로 예상했을 것이다 :이이 일을 올바른 방법이 될 것이라고 생각Go에서 구조체에 배열에 대한 포인터가있는 구조체를 어떻게 가지고 있습니까?

package main 

type Item struct { 
    Key string 
    Value string 
} 

type Blah struct { 
    Values []Item 
} 

func main() { 
    var list = [...]Item { 
    Item { 
     Key : "Hello1", 
     Value : "World1", 
    }, 
    Item { 
     Key : "Hello1", 
     Value : "World1", 
    }, 
    } 

    _ = Blah { 
    Values : &list, 
    } 
} 

을; 값은 슬라이스이고 list는 배열입니다. & list는 Item []에 할당 할 수있는 슬라이스 여야합니다. 맞습니까? 메시지와 함께

... 대신, 그것은 오류 : C에서

cannot use &list (type *[2]Item) as type []Item in assignment 

, 당신은 쓸 것 :

struct Item { 
    char *key; 
    char *value; 
}; 

struct Blah { 
    struct Item *values; 
}; 

당신은 어떻게 이동에 그렇게합니까?

나는이 질문을했다 : Using a pointer to array

을 ...하지만 어느 응답은 이동의 이전 버전, 또는 그들은 단지 일반 틀렸다. :/

답변

4

슬라이스는 단순히 배열에 대한 포인터가 아니며 길이와 용량이 포함 된 내부 표현을가집니다. 당신은 당신이 할 수있는 list에서 슬라이스를 얻고 싶다면

:

_ = Blah { 
    Values : list[:], 
} 
3

이동은, 다행히, 너무 장황하지 그것은 OP에서 보일 수있다. 이 작품 :

package main 

type Item struct { 
     Key, Value string 
} 

type Blah struct { 
     Values []Item 
} 

func main() { 
     list := []Item{ 
       {"Hello1", "World1"}, 
       {"Hello2", "World2"}, 
     } 

     _ = Blah{list[:]} 
} 

(또한 here)

PS : 나 이동에 C를 작성하지 않는 것이 좋습니다 보자.

+0

C 코드에 대한 의견이 있습니까? 이 질문에 무관심한 것 같습니다. 이 예는 어떤 언어에서 나왔을 수도 있습니다. 간단히 말해서 '여기 X에서 어떻게 할 것인가? 이걸 이동하는 방법은 무엇입니까?' – Doug

+2

예, 이에 대한 요점이 있습니다. 예를 들어 OP는 Go로 코딩하는 과정에서 Go 배열과 Go 조각에 대한 오해를 불러 일으키는 반면에 C로 생각하는 방법을 보여줍니다. Go의''[] T''는 C의''['v''와 같지 않습니다. 그런 함정에 빠질 유일한 곳은 아닙니다. Go는 C와 많이 닮았지만 실제로 C와는 많은면에서 비슷하지 않습니다. 추신 : 필요한 것 이상으로 복잡한 복합 문자는 C-ism이기도합니다. – zzzz

+0

불필요하게 '당신이 잘못하고있는 것 같아 !!' 응답, 간단한 질문. : – Doug

2

Go로 시작하는 경우 완전히 배열을 무시하고 슬라이스 만 사용하면됩니다. 배열은 거의 사용되지 않으며 초보자에게 많은 문제를 일으 킵니다. 슬라이스가있는 경우 참조 유형이므로 포인터를 필요로하지 않습니다.

Here is your example 훨씬 더 관용적 인 포인터가없는 슬라이스가 있습니다.

package main 

type Item struct { 
    Key string 
    Value string 
} 

type Blah struct { 
    Values []Item 
} 

func main() { 
    var list = []Item{ 
     Item{ 
      Key: "Hello1", 
      Value: "World1", 
     }, 
     Item{ 
      Key: "Hello1", 
      Value: "World1", 
     }, 
    } 

    _ = Blah{ 
     Values: list, 
    } 
} 
관련 문제