Golang与Google Cloud Datastore集成指南
Golang与Google Cloud Datastore集成指南
你好。我有一个Go模块,正在尝试与Google Cloud Datastore集成。我使用的是Go v1.14。当我执行 go get 来获取云数据存储库时,出现了以下错误。
go: cloud.google.com/go/datastore upgrade => v1.1.0
go get: cloud.google.com/go/datastore@v1.1.0 requires
google.golang.org/api@v0.17.0 requires
cloud.google.com/go@v0.38.0 requires
golang.org/x/lint@v0.0.0-20190301231843-5614ed5bae6f/go.mod: verifying module: golang.org/x/lint@v0.0.0-20190301231843-5614ed5bae6f/go.mod: malformed record data
以下是我的 go.mod 文件内容:
module <MyNamespace>.com/<moduleName>
go 1.14
require (
github.com/stretchr/testify v1.5.1
)
我不太理解这个错误。有人能帮我理解一下吗?
更多关于Golang与Google Cloud Datastore集成指南的实战教程也可以访问 https://www.itying.com/category-94-b0.html
3 回复
感谢 @lutzhorn 的回复。
我刚刚找到了问题所在。更新操作与之前下载的某些本地缓存发生了冲突。在清除缓存之后,我就能用 go get 运行它了。
更多关于Golang与Google Cloud Datastore集成指南的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
我无法复现你的问题。给出一个新模块:
module de.lhorn/forum
go 1.13
require cloud.google.com/go/datastore v1.1.0
require github.com/stretchr/testify v1.5.1
以及一个类似这样的 main.go:
package main
import (
_ "cloud.google.com/go/datastore"
"fmt"
_ "github.com/stretchr/testify"
)
func main() {
fmt.Println("vim-go")
}
运行 go build . 符合预期。它会下载所需的模块及其依赖项,并构建可执行文件。
由于你正在使用模块,请尝试运行 go build . 而不是 go get。
这个错误是由于Go模块代理中的损坏记录导致的。以下是解决方案:
// 首先清理模块缓存
go clean -modcache
// 然后设置GOPROXY使用direct模式绕过代理
export GOPROXY=direct
// 重新获取依赖
go get cloud.google.com/go/datastore@latest
// 或者指定版本
go get cloud.google.com/go/datastore@v1.1.0
如果问题仍然存在,可以尝试删除go.mod和go.sum文件后重新初始化:
rm go.mod go.sum
go mod init <MyNamespace>.com/<moduleName>
go get cloud.google.com/go/datastore@v1.1.0
更新后的go.mod文件应该类似这样:
module <MyNamespace>.com/<moduleName>
go 1.14
require (
cloud.google.com/go/datastore v1.1.0
github.com/stretchr/testify v1.5.1
)
基本的数据存储操作示例:
package main
import (
"context"
"log"
"cloud.google.com/go/datastore"
)
type Task struct {
Description string
Priority int
}
func main() {
ctx := context.Background()
// 创建客户端
client, err := datastore.NewClient(ctx, "your-project-id")
if err != nil {
log.Fatalf("Failed to create client: %v", err)
}
defer client.Close()
// 创建实体
task := &Task{
Description: "Learn Go with Datastore",
Priority: 1,
}
key := datastore.IncompleteKey("Task", nil)
key, err = client.Put(ctx, key, task)
if err != nil {
log.Fatalf("Failed to save task: %v", err)
}
// 查询实体
var retrieved Task
err = client.Get(ctx, key, &retrieved)
if err != nil {
log.Fatalf("Failed to retrieve task: %v", err)
}
log.Printf("Retrieved task: %+v", retrieved)
}

