英文:
Booleans always false when Putting entities in Google App Engine datastore - Golang
问题
由于某种原因,当我尝试将布尔数据存储在Google Apps数据存储中时,它总是存储为false。
我的实体定义如下:
type Link struct {
Name string //链接的非正式标签。由原始用户设置。
...
isOpen bool //告诉我们是否有人可以重写链接。由原始用户设置。
isPerminant bool //告诉我们链接是否应该永久保存。
isFlagged bool //告诉我们内容是否曾被标记为不适当。
}
我创建一个对象并赋值如下:
//从表单数据创建Link
l := Link{
Name: r.FormValue("name"),
...
isOpen: r.FormValue("open")=="on",
isPerminant: r.FormValue("perminant")=="on",
isFlagged: r.FormValue("flagged")=="on",
}
我通过运行以下代码来验证数据:
//将Link放入数据存储中
lKey, err := datastore.Put(c, datastore.NewIncompleteKey(c, "Link", nil), &l)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
var newLink Link
if err = datastore.Get(c, lKey, &newLink); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
newLink的输出值为:{[name] ... false false false}
即使我为is[...]属性中的一个硬编码为true值,它们仍然保持为false!为什么?
英文:
For some reason when I attempt to store boolean data in the Google Apps datastore, it always stores as false.
My entity definition looks like this:
type Link struct {
Name string //Coloquial label for link. Set by original User.
...
isOpen bool //Tells us whether anyone can rewrite the link. Set by original User.
isPerminant bool //Tells us whether link should be saved forever.
isFlagged bool //Tells us whether the content has ever been flagged inappropriate.
}
I create an object and assign values like so:
//Create Link from form data
l := Link{
Name: r.FormValue("name"),
...
isOpen: r.FormValue("open")=="on",
isPerminant: r.FormValue("perminant")=="on",
isFlagged: r.FormValue("flagged")=="on",
}
I verify the data by running the following:
//Put the Link in the datastore
lKey, err := datastore.Put(c, datastore.NewIncompleteKey(c, "Link", nil), &l)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
var newLink Link
if err = datastore.Get(c, lKey, &newLink); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
newLink output value: {[name] ... false false false}
Even if I hard code in a true value for one of the is[...] properties, they all still remain false! WHHHHHHYYYY???
答案1
得分: 8
尝试将Is
中的**I
**大写:
type Link struct {
Name string //链接的非正式标签。由原始用户设置。
IsOpen bool //告诉我们是否有人可以重写链接。由原始用户设置。
IsPerminant bool //告诉我们链接是否应该永久保存。
IsFlagged bool //告诉我们内容是否曾被标记为不适当。
}
.
//从表单数据创建链接
l := Link{
Name: r.FormValue("name"),
IsOpen: r.FormValue("open") == "on",
IsPerminant: r.FormValue("perminant") == "on",
IsFlagged: r.FormValue("flagged") == "on",
}
要将字段保存到数据存储中,它必须是可导出的。即以大写字母开头。有关更多信息,请阅读Effective Go中的Names部分。
英文:
Try capitalizing the I
in Is
:
type Link struct {
Name string //Coloquial label for link. Set by original User.
IsOpen bool //Tells us whether anyone can rewrite the link. Set by original User.
IsPerminant bool //Tells us whether link should be saved forever.
IsFlagged bool //Tells us whether the content has ever been flagged inappropriate.
}
.
//Create Link from form data
l := Link{
Name: r.FormValue("name"),
IsOpen: r.FormValue("open") == "on",
IsPerminant: r.FormValue("perminant") == "on",
IsFlagged: r.FormValue("flagged") == "on",
}
For a field to be saved to the datastore it must be exported. I.e. begin with an uppercase letter. For more information please read the Names section of Effective Go
答案2
得分: 0
你是否在硬编码对象之后使用了put方法?确保你所做的任何更改都要跟着put方法,以确保安全。
英文:
Are you using the put method AFTER hardcoding the object? Make sure any changes you make are followed by put, just to be safe.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论