Rumah >pembangunan bahagian belakang >Golang >Tukar firestore 'integer_value' kepada integer

Tukar firestore 'integer_value' kepada integer

PHPz
PHPzke hadapan
2024-02-06 09:10:12746semak imbas

将 firestore“integer_value”转换为整数

Kandungan soalan

Menggunakan perpustakaan golang firestore 1.8, saya cuba menggunakan fungsi count() baharu firestore yang dilancarkan oleh Google pada musim luruh lalu. Dokumen itu nampaknya masih belum mempunyai contoh, bukan yang saya temui, tetapi saya menyusun beberapa kod yang agak berfungsi yang membuatkan saya melakukan segala-galanya kecuali sebenarnya menjana integer. Nilai "result[usercountalias]" di bahagian bawah coretan ialah nilai yang saya berminat untuk menukar kepada integer, tetapi saya tidak pasti caranya. Sudah tentu, saya boleh menjadikannya rentetan, membelah pada kolon, dan kemudian menghuraikannya, tetapi itu akan kelihatan hodoh.

Sebarang petua akan sangat dihargai!

Terima kasih banyak-banyak.

func (s UserService) Count(labID string) (int64, error) {

    if s.DB == nil {
        return -1, customerrors.ErrDatabaseMissing
    }

    query := s.DB.
        Collection(CollectionUsers).
        Where("lab_id", "==", labID)


    userCountAlias := "userCount"

    ag := query.NewAggregationQuery()

    //result is a firestore.AggregationResult, which seems to consist of just a 
    //map[string]interface{}
    result, err := ag.WithCount(userCountAlias).Get(s.Ctx)

    if err != nil {
        return -1, err
    }

    v := result[userCountAlias]//How do I cast this to an integer?
    fmt.Printf("Type = %v", v) //Prints "Type = integer_value:379"

    return -1, nil
}

jawapan betul


cuba jenis fmt.printf("type = %t", v) 找出 v.

v 最有可能是 firestorepb.value。请注意,这在 1.8 中尚不可用。尝试将 cloud.google.com/go/firestore Naik taraf kepada versi terkini (kini 1.9).

package main

import (
    "fmt"

    "cloud.google.com/go/firestore/apiv1/firestorepb"
)

func main() {
    var v interface{} = &firestorepb.Value{
        ValueType: &firestorepb.Value_IntegerValue{
            IntegerValue: 379,
        },
    }

    fmt.Printf("%T\n", v) // *firestorepb.Value
    fmt.Printf("%v\n", v) // integer_value:379

    if v, ok := v.(*firestorepb.Value); ok {
        fmt.Printf("%v\n", v.GetIntegerValue()) // 379
    }
}

Ujian dalam repositori rasmi mendapatkan semula nilai dengan cara yang sama. Lihat testintegration_countaggregationquery.

Atas ialah kandungan terperinci Tukar firestore 'integer_value' kepada integer. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Artikel sebelumnya:Penukaran konteks GolangArtikel seterusnya:Penukaran konteks Golang