我的数据存储区PropertyLoadSaver在golang中不起作用

时间:2014-08-02 21:21:11

标签: google-app-engine go

我使用的文档(https://developers.google.com/appengine/docs/go/datastore/reference#hdr-The_PropertyLoadSaver_Interface

只使用此结构而不使用propertyLoadSaver一切正常。

type Trick struct {
    Name string `json:"name" datastore:"-"`
    Difficulty int `json:"difficulty"`
}

当只使用负载属性时,它也可以工作。

func (s *Trick) Load(c <-chan datastore.Property) error {
    return datastore.LoadStruct(s, c)
}

保存属性会在返回线处导致引起恐慌吗?

func (s *Trick) Save(c chan<- datastore.Property) error {
    defer close(c)
    return datastore.SaveStruct(s, c)
}

当我尝试这样做时,它不会导致恐慌,但不会保存任何东西?

func (s *Trick) Save(c chan<- datastore.Property) error {
    defer close(c)
    c <- datastore.Property{
        Name:  "Difficulty",
        Value: s.Difficulty,
    }
    return nil
}

(使用sdk v1.9.8)

1 个答案:

答案 0 :(得分:3)

此处defer close(c)会引起恐慌

func (s *Trick) Save(c chan<- datastore.Property) error {
    defer close(c)
    return datastore.SaveStruct(s, c)
}

以下是好的

func (s *Trick) Save(c chan<- datastore.Property) error {
    return datastore.SaveStruct(s, c)
}

这也没关系

func (s *Trick) Save(c chan<- datastore.Property) error {
    defer close(c)
    c <- datastore.Property{
        Name:  "Difficulty",
        Value: int64(s.Difficulty),
    }
    return nil
}

(请编辑文档以使其更清晰https://developers.google.com/appengine/docs/go/datastore/reference#hdr-The_PropertyLoadSaver_Interface