2016-05-20 97 views
1

這裏是我試圖閱讀的實體的屏幕截圖。從Google可讀數據AppEngine上的數據存儲與Go

Entities

這裏是我的Go代碼:

package readfromgcd 

import (
     "net/http" 
     "appengine" 
     "appengine/datastore" 
     "fmt" 
) 

type person struct { 
    firstname string 
    lastname string 
} 

func init() { 
    http.HandleFunc("/", readpeople) 
} 

func readpeople (w http.ResponseWriter, r *http.Request) { 
    c := appengine.NewContext(r) 
    q := datastore.NewQuery("person") 
    people := make([]person, 0, 20) 
    if _, err := q.GetAll(c, &people); err !=nil { 
     http.Error(w, err.Error(), http.StatusInternalServerError) 
    } 
    fmt.Fprint(w, "Hello world!") 
} 

我得到以下結果: 數據存儲:無法加載現場 「名字」 變成了 「readpeople.person」:沒有這樣的結構領域

下面是截圖。 result

此代碼不顯示對此數據做任何事情。我想限制這篇文章的檢索。我必須錯過簡單的東西。我哪裏錯了?預先感謝您的幫助。

回答

0

數據存儲中的屬性名稱與您的Go結構person中的字段名稱不匹配。例如在您的數據存儲區person有屬性firstName,但您的結構有字段firstname

所以首先要讓它們匹配;或者如果要在Go結構中使用不同的名稱,請使用struct tags來定義映射。

另一件重要的事情是:您必須按順序導出您的類型和其字段,以便datastore程序包能夠使用反射將數據加載到其中。所以你必須用大寫字母開始你的類型名稱和字段:

type Person struct { 
    FirstName string `datastore:"firstName"` 
    LastName string `datastore:"lastName"` 
} 
+0

這正是我所需要的。我做了這個改變,它完美地工作。謝謝! – wdwinslow

+0

我清理了這段代碼並添加了一些代碼來寫回數據並顯示數據。我已經上傳了所有如果在GitHub作爲示例應用程序。也許這對將來的某個人有用。 [鏈接](https://github.com/wdwinslow/go-appengine-cloud-datastore) – wdwinslow

相關問題