为了账号安全,请及时绑定邮箱和手机立即绑定

GoLang App Engine 结构名称

GoLang App Engine 结构名称

Go
红颜莎娜 2021-11-01 10:33:48
我最近在玩 AppEngine 并遇到以下代码的问题,其中似乎写入数据存储的唯一值是日期。我花了一段时间对此感到震惊,发现只需将结构中的第一个字符大写即可修复它!我想知道是否还有其他人遇到过这个问题并且知道为什么我无法在 Golang 结构中为数据存储使用小写成员名称?我认为这可能是 Google AppEngine 处理结构写入方式的错误。这是问题代码:package mainimport (    "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    }
查看完整描述

1 回答

?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

这与 Go 如何处理“公共”和“私有”概念有关。


要导出,您确实需要大写的字段名称。这可以帮助解释...它与 JSON 相关,但它适用于这里,因为这两种情况都需要从结构中导出数据。


这是来自关于 Go 和 JSON的Eager 博客文章,我发现它很有帮助:


字段名称


您可能知道,Go 要求所有导出的字段以大写字母开头。然而,在 JSON 中使用这种样式并不常见。我们使用标签让解析器知道在哪里实际查找值。


你可以在上面的例子中看到一个例子,但作为复习,它是这样的:


type MyStruct struct {

    SomeField string `json:"some_field"`

}


查看完整回答
反对 回复 2021-11-01
  • 1 回答
  • 0 关注
  • 142 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信