2017-11-20 12 views
1

나는 같이 데이터 저장소 개체가.이동 구글 데이터 저장소 널 (null)은

error caught: datastore: cannot load field "guid" into a "main.Edge": no such struct field 

Key=/edges,4503602429165568 
Edge=main.Edge{created:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}, details:"", guid:"", start:"", end:""} 

내가 데이터 저장소 콘솔에서 해당 키를 검색, 내가 볼 :

type Edge struct { 
     created time.Time 
     details string `datastore: "details,omitempty"` 
     guid  string `datastore: "guid,omitempty"` 
     start  string `datastore: "start,omitempty"` 
     end  string `datastore: "end,omitempty"` 
    } 

    for t := client.Run(ctx, q); ; { 
     var x Edge 
     key, err := t.Next(&x) 
     if err == iterator.Done { 
      break 
     } 
     if err != nil { 
      fmt.Printf("error caught: %v\n\n", err) 
     } 
     fmt.Printf("Key=%v\nEdge=%#v\n\n", key, x) 
    } 

출력 오류가 항상 같은 것입니다 : 이동에

, 나는이 일을 시도하고있다 guid은 유효한 string입니다.

GetAll 거의 같은 문제가 발생했습니다.

내 질문은 :

  • 내가 이동하는 새입니다. 내가 여기서 잘못하고있는 것이 있습니까? (어떤 오타가 Stackoverflow 특정 것입니다. 내가 여기에 몇 가지를 변경했기 때문에)
  • 어쨌든 구조체에 넣기 전에 어떤 데이터 저장소가 전송되는지 확인해야합니까?
  • 일부 값은 null 일 때가 있습니다. start, enddetails과 같이 구조체에서 string에 유효합니까?

감사합니다. 바로 눈에 띄는

답변

1

두 가지 문제 :

  1. 구조체 필드는 내 보내야합니다, 그래서 대문자로 이름을 시작합니다.
  2. tag values은 "유효하지 않습니다"(규약을 준수하지 않음)입니다. 키 datastore:과 값 "details,omitempty" 사이에 공백을 두어서는 안됩니다.

    type Edge struct { 
        Created time.Time `datastore:"created"` 
        Details string `datastore:"details,omitempty"` 
        Guid string `datastore:"guid,omitempty"` 
        Start string `datastore:"start,omitempty"` 
        End  string `datastore:"end,omitempty"` 
    } 
    

    는 상기 두 문제에 대한 비슷한 질문을 참조하십시오 :

그래서 다음과 같은 구조체 정의를 사용

golang mgo getting empty objects

Why struct fields are showing empty?

만약을의 속성 데이터 저장소가 null인데 문제가되지 않습니다. Go 구조체의 경우. 이 경우 해당 구조체 필드는 유형이 zero-value이고 string 유형의 경우 빈 문자열 ""입니다.데이터 저장소 null, 데이터 저장소 "누락 된 속성"및 실제 빈 문자열 ""을 구별하려면 필드 유형을 포인터 (예 : *string)로 변경할 수 있습니다.이 경우 누락 된 속성과 nullnil 포인터 값에 해당하며, 기존의 빈 문자열 값은 빈 문자열 값에 대한 포인터가 아닌 nil 포인터가됩니다.

+0

그게 전부 였어! 질문을 따르십시오 : 동일한 태그에서 noindex와 omitempty를 가질 수있는 방법이 있습니까? – Chemdream

+0

@ 화학자 쉼표로 쉼표로 구분하십시오. 'datastore : "end, omitempty, noindex"', 그러나 그것이 지원된다면 문서를 참고하십시오. – icza