如何使用golang中的api编辑GCP云存储中的现有数据

时间:2018-03-09 11:21:36

标签: go

我正在创建一个与Google数据存储区通信的应用程序,以获取现有数据,并对现有数据执行添加,编辑和删除操作。我能够获取现有数据,并删除那里的数据。但是没有得到如何通过golang中的api编辑/更新数据。

提供我尝试为此执行的代码段:

    func EditCustomer(w http.ResponseWriter, r *http.Request){
    ctx := context.Background()
    params := mux.Vars(r)
    customer_id :=params["partner_id"]
    projectID := util.MustGetenv("GOOGLE_CLOUD_PROJECT")
    client, err := datastore.NewClient(ctx, projectID)
    if err != nil {
        log.Fatalf("Failed to create client: %v", err)
    }
    var customer models.Customer
    kind := util.MustGetenv("DATA_STORE_KIND") 
    ds.EditCustomer(client,kind,customer_id,&customer,ctx)
    json.NewEncoder(w).Encode(customer)
}

dao中的EditCustomer方法如下:

 func EditCustomer(client *datastore.Client,kind string ,name string,dst interface{},ctx context.Context) {
    taskKey := datastore.NameKey(kind, name, nil)

    < some methos here to edit and update itin datstorage  >
}

请告知此事。有没有人在golang中使用api的dev?

1 个答案:

答案 0 :(得分:0)

我会像这样更新:

currentCustomer := &Customer{}
_, err := client.RunInTransaction(ctx, func(tx *datastore.Transaction) error {
    if getErr := tx.Get(key, currentCustomer); getErr != nil {
        return getErr
    }

    // edit your object

    var putErr error
    _, putErr = tx.Put(key, updatedCustomer)

    return putErr
})
if err != nil {
    return nil, err
}
_, err = client.Put(ctx, key, customer)