不能在返回值中使用类型变量

我正在设置一个将 json 写入 golang 中的 firebase 存储桶的函数。该函数GetStorage应该创建一个新的存储实例并从函数中返回它以在函数中使用archiveActive


我有一个问题,我无法弄清楚GetStorage函数的返回类型是什么。我收到以下错误return client:


cannot use client (variable of type *storage.Client) as *storage.Client value in return statement

func GetStorage() *storage.Client {

    ctx := context.Background()

    config := &firebase.Config{

        StorageBucket: "myapp-cloud.appspot.com",

    }

    fireBaseApp := push.InitializeAppWithServiceAccount(config)

    client, err := fireBaseApp.Storage(ctx)

    if err != nil {

        log.Fatalln(err)

    }

    return client


}


func GetContext() context.Context {

    ctx := context.Background()

    ctx, cancel := context.WithTimeout(ctx, zone.Second*50)

    defer cancel()

    return ctx

}


func archiveActive(jsonData string) {

    ctx := context.Background()

    ctx, cancel := context.WithTimeout(ctx, zone.Second*50)

    defer cancel()

    client := GetStorage()

    time := zone.Now().Format("2006-01-02")

    bucket, err := client.DefaultBucket()

    if err != nil {

        log.Fatalln(err)

    }


    obj := bucket.Object("dev/archives/active/" + time)


    ...

}



但是,按照以下方式进行操作。只要新的存储客户端具有相同的功能就可以了。我只需要帮助将功能分解成更小的部分。


func getStorageConfig() *firebase.Config {

    return &firebase.Config{

        StorageBucket: "myapp-cloud.appspot.com",

    }

}


func getContext() context.Context {

    ctx := context.Background()

    ctx, cancel := context.WithTimeout(ctx, zone.Second*50)

    defer cancel()

    return ctx

}


func archiveActive(jsonData string) {


    time := zone.Now().Format("2006-01-02")

    ctx := getContext()

    client, err := push.InitializeAppWithServiceAccount(getStorageConfig()).Storage(context.Background())

    if err != nil {

        log.Fatalln(err)

    }


    bucket, err := client.DefaultBucket()

    if err != nil {

        log.Fatalln(err)

    }


    obj := bucket.Object("dev/archives/active/" + time)

    ...

}


小怪兽爱吃肉
浏览 149回答 1
1回答

月关宝盒

Client“firebase.google.com/go/storage” (这是 的返回值fireBaseApp.Storage())和“cloud.google.com/go/storage”(似乎是 的返回值)中有一个结构GetStorage()。这两个包都有名称storage,因此如果您需要同时导入它们,则必须使用导入别名。如果没有看到所有代码,我不确定,但我认为这可能对你有用:import firebaseStorage "firebase.google.com/go/storage"...func GetStorage() *firebaseStorage.Client {
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go