Google app engine GoLang应用程序引擎结构名称
我最近在玩AppEngine时遇到了以下代码的一个问题,其中似乎写入数据存储的唯一值是日期。我花了一段时间研究这个问题,发现通过简单地大写结构中的第一个字符就可以解决这个问题 我想知道是否有人遇到过这个问题,并且知道为什么我不能在Golang结构中为数据存储使用小写成员名?我认为这可能是Google AppEngine处理struct写入的方式的一个缺陷 以下是问题代码:Google app engine GoLang应用程序引擎结构名称,google-app-engine,struct,go,Google App Engine,Struct,Go,我最近在玩AppEngine时遇到了以下代码的一个问题,其中似乎写入数据存储的唯一值是日期。我花了一段时间研究这个问题,发现通过简单地大写结构中的第一个字符就可以解决这个问题 我想知道是否有人遇到过这个问题,并且知道为什么我不能在Golang结构中为数据存储使用小写成员名?我认为这可能是Google AppEngine处理struct写入的方式的一个缺陷 以下是问题代码: package main import ( "fmt" "net/http" "time"
package main
import (
"fmt"
"net/http"
"time"
"appengine"
"appengine/datastore"
)
/* This is the problem struct */
type storeVal struct {
firstName string //FirstName works
lastName string //LastName works
email string //Email works
password string //Password works
Date time.Time
}
func init() {
http.HandleFunc("/", handle)
http.ListenAndServe(":8080", nil)
}
func handle(w http.ResponseWriter, r *http.Request) {
c := appengine.NewContext(r)
/* Write values to DataStore */
e1 := storeVal{
firstName: "Bob", //FirstName works
lastName: "Smith", //lastName works
email: "bob.smith@test.com", //Email works
password: "password!", //Password works
Date: time.Now(),
}
key := datastore.NewIncompleteKey(c, "storeVal", nil)
_, err := datastore.Put(c, key, &e1)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
fmt.Fprintf(w, "successfully added {firstName: '%s', lastName: '%s', email: '%s', password: '%s'}", e1.firstName, e1.lastName, e1.email, e1.password)
/* Read values back in. */
q := datastore.NewQuery("storeVal").
Filter("firstName =", "Bob").
Filter("lastName =", "Smith").
Order("-Date")
var storeVals []storeVal
_, err2 := q.GetAll(c, &storeVals)
if err2 != nil {
http.Error(w, err2.Error(), http.StatusInternalServerError)
return
}
if (len(storeVals) == 0) {
fmt.Printf("No results.");
return
}
e2 := storeVals[0]
fmt.Fprintf(w, "successfully grabbed {firstName: '%s', lastName: '%s', email: '%s', password: '%s', uaprem: '%s'}", e2.firstName, e2.lastName, e2.email, e2.password)
}
这与Go如何处理“公共”和“私人”概念有关 要导出,您确实需要大写字段名。我可以解释一下。。。它与JSON相关,但在这里适用,因为这两种情况都需要从结构导出数据 这是来自的,我觉得很有帮助: 字段名 您可能知道,Go要求所有导出的字段都以 大写字母。 然而,在JSON中使用这种样式并不常见。 我们使用标记让解析器知道在哪里实际查找 价值观 你可以在上面的例子中看到一个例子,但是作为一个例子 复习这就是它看起来的样子:
type MyStruct struct {
SomeField string `json:"some_field"`
}
也许这些字段必须导出?仅导出大写的结构字段。我认为这只适用于希望导出标识符的情况,在本例中我不太关心这一点。我只是在这个包的内部使用它们。在创建实体部分中,声明只有导出的字段保存到数据存储中。