Я настраиваю функцию, которая записывает json в хранилище базы данных firebase в golang. Функция 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)
...
}