엔티티를 유지하고 데이터베이스가 키를 생성하도록 허용하고 있습니다. 불행하게도, 나는 API에서 합성 ID를 애타게 할 수없는 것 ... 여기 내가 뭘 내용은 다음과 같습니다Google 고유 식별자를 생성하지 않습니까?
case "POST":
d,_ := ioutil.ReadAll(r.Body)
participant := new(Participant)
err := json.Unmarshal(d, &participant)
if err != nil {
serveError(c, w, err)
return
}
var key *datastore.Key;
if participant.ID == 0 {
// no id yet .. create an incomplete key and allow the db to create one.
key = datastore.NewIncompleteKey(c, "participant", parentKey)
} else {
// we have an id. use that to update
key = datastore.NewKey(c, "participant", "", participant.ID, parentKey)
}
// PERSIST!
putKey, e := datastore.Put(c, key, participant)
if e != nil {
serveError(c, w, e)
return
}
// Fetch back out of the database, presumably with my new ID
if e = datastore.Get(c, putKey, participant); e != nil {
serveError(c, w, e)
return
}
// send to the consumer
json,_ := json.Marshal(participant)
w.Write(json)
음, 이상하게 ID가 항상 0입니다! 세부 사항은 지속되지만 동일한 ID 필드로 여러 값이 유지됩니다. 싱긋 웃음을 보려면 여기를 객체 정의의 : GET 작업과 함께 다음
type Participant struct {
ID int64
LastName string
FirstName string
Birthdate string
Email string
Cell string
}
, 나는 개체의 목록을 제시하고있다 (예, 내가 만든 엔티티, 내가 그들을 만든만큼) 모두의 ID와 제로.
[
{"ID":0,"LastName":"Schmuck","FirstName":"Joe","Birthdate":"12-12-12","Email":"","Cell":""},
{"ID":0,"LastName":"Schmuck","FirstName":"Jane","Birthdate":"12-12-12","Email":"","Cell":""},
{"ID":0,"LastName":"Schmuck","FirstName":"Jane","Birthdate":"12-12-12","Email":"","Cell":""},
{"ID":0,"LastName":"Schmuck","FirstName":"Jane","Birthdate":"12-12-12","Email":"","Cell":""},
{"ID":0,"LastName":"Schmuck","FirstName":"Jane","Birthdate":"12-12-12","Email":"","Cell":""},
{"ID":0,"LastName":"Schmuck","FirstName":"Jane","Birthdate":"12-12-12","Email":"","Cell":""}
]
완전성을 위해 ID 값이 0 인 NewKey()도 사용했지만 동일한 결과를 얻었습니다. NewKey에 관한 API 문서는 (문자열) 이름과 ID가 불완전한 키를 생성하는 제로가된다는 것을 말합니다 - 문자열을 0으로 만드는 방법을 모르지만 nil이 작동하지 않습니다.
누군가는 문서의 올바른 부분을 가리키며 굉장히 분명한 것을 알아낼 수있게 도와줍니다.
느린 타이핑을하는 날이 분명합니다. Jeremy 's가 더 완전한 대답입니다! –