Я нахожусь в процессе изучения некоторых базовых c концепций в Go, и поэтому я экспериментирую с абстракцией уровня данных, аналогичной тому, что я делал бы в других языках программирования, и я работаю в следующая ошибка с моим кодом:
Failed to save task: datastore: invalid entity type
Код следующий:
package main
import (
"context"
"fmt"
"log"
"cloud.google.com/go/datastore"
"github.com/google/uuid"
)
type DatastoreEntity interface {
Kind() string
Name() string
}
type Task struct {
TaskId string
Description string
}
func (task *Task) Kind() string {
return "tasks"
}
func (task *Task) Name() string {
return task.TaskId
}
func main() {
task := Task{
TaskId: uuid.New().String(),
Description: "Buy milk",
}
SaveEntity(&task)
}
func SaveEntity(entity DatastoreEntity) {
ctx := context.Background()
projectId := "my-gcp-project"
client, err := datastore.NewClient(ctx, projectId)
if err != nil {
log.Fatalf("Failed to create client: %v", err)
}
entityKey := datastore.NameKey(entity.Kind(), entity.Name(), nil)
if _, err := client.Put(ctx, entityKey, &entity); err != nil {
log.Fatalf("Failed to save task: %v", err)
}
fmt.Printf("Saved %v: %v\n", entityKey, entity.Name())
}
Любая помощь в объяснении, почему это не работает, будет высоко ценится.
Мой второй вопрос заключается в том, что в официальной datastore
Go документации пакета говорится следующее:
// Create a datastore client. In a typical application, you would create
// a single client which is reused for every datastore operation.
dsClient, err := datastore.NewClient(ctx, "my-project")
if err != nil {
// Handle error.
}
Каков рекомендуемый шаблон для создания dsClient
только один раз в приложении?