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)
}
回到顶部