Rumah >pembangunan bahagian belakang >Golang >Interaksi antara fungsi Golang dan pangkalan data teragih dalam sistem teragih

Interaksi antara fungsi Golang dan pangkalan data teragih dalam sistem teragih

王林
王林asal
2024-04-19 15:06:01727semak imbas

Dalam sistem teragih, fungsi Go boleh berinteraksi dengan pangkalan data teragih. Langkah-langkah khusus adalah seperti berikut: Pasang kebergantungan yang diperlukan. Gunakan fungsi spanner.NewClient untuk menyambung ke pangkalan data. Gunakan kaedah Pertanyaan untuk melaksanakan pertanyaan dan dapatkan iterator. Gunakan kaedah Do untuk mengulangi hasil pertanyaan dan memproses data. Selepas pertanyaan selesai, gunakan kaedah Tutup untuk menutup sambungan.

分布式系统中 Golang 函数与分布式数据库的交互

Interaksi antara fungsi Go dan pangkalan data teragih dalam sistem teragih

Dalam sistem teragih, adalah keperluan biasa untuk fungsi Go berinteraksi dengan pangkalan data teragih. Artikel ini membimbing anda menggunakan kod Go untuk menyambung ke dan menanyakan pangkalan data yang diedarkan.

Pasang dependencies

Langkah pertama ialah memasang dependencies yang diperlukan:

import (
    "context"
    "fmt"
    "log"

    "cloud.google.com/go/spanner"
)

Sambung ke pangkalan data

Untuk menyambung ke pangkalan data, gunakan fungsi spanner.NewClient: spanner.NewClient 函数:

client, err := spanner.NewClient(context.Background(), "projects/my-project", "instances/my-instance", "databases/my-database")
if err != nil {
    log.Fatal(err)
}

执行查询

要执行查询,请使用 Query 方法:

stmt := spanner.Statement{SQL: `SELECT * FROM Singers`}
iter := client.Single().Query(context.Background(), stmt)
defer iter.Stop()

iter 是一个迭代器,它将遍历查询结果。

处理结果

要处理结果,请使用 Dorreee

Laksanakan query

Untuk melaksanakan pertanyaan, gunakan kaedah Query:

for {
    row, err := iter.Next()
    if err == iterator.Done {
        break
    }
    if err != nil {
        log.Fatal(err)
    }
    var singerId int64
    var firstName string
    var lastName string
    if err := row.ColumnByName("SingerId", &singerId); err != nil {
        log.Fatal(err)
    }
    if err := row.ColumnByName("FirstName", &firstName); err != nil {
        log.Fatal(err)
    }
    if err := row.ColumnByName("LastName", &lastName); err != nil {
        log.Fatal(err)
    }
    fmt.Printf("%d %s %s\n", singerId, firstName, lastName)
}

iter ialah iterator yang akan berulang pada hasil pertanyaan.

Memproses keputusan

Untuk memproses keputusan, sila gunakan kaedah Do: 🎜
client.Close()
🎜Tutup sambungan🎜🎜Selepas pertanyaan selesai, sila tutup sambungan ke pangkalan data: 🎜
package main

import (
    "context"
    "fmt"
    "log"

    "cloud.google.com/go/spanner"
)

func main() {
    client, err := spanner.NewClient(context.Background(), "projects/my-project", "instances/my-instance", "databases/my-database")
    if err != nil {
        log.Fatal(err)
    }
    defer client.Close()

    stmt := spanner.Statement{SQL: `SELECT * FROM Singers`}
    iter := client.Single().Query(context.Background(), stmt)
    defer iter.Stop()

    for {
        row, err := iter.Next()
        if err == iterator.Done {
            break
        }
        if err != nil {
            log.Fatal(err)
        }
        var singerId int64
        var firstName string
        var lastName string
        if err := row.ColumnByName("SingerId", &singerId); err != nil {
            log.Fatal(err)
        }
        if err := row.ColumnByName("FirstName", &firstName); err != nil {
            log.Fatal(err)
        }
        if err := row.ColumnByName("LastName", &lastName); err != nil {
            log.Fatal(err)
        }
        fmt.Printf("%d %s %s\n", singerId, firstName, lastName)
    }
}
🎜Kes sebenar 🎜🎜Berikut ialah satu contoh kod Complete Go yang menunjukkan cara menyambung ke pangkalan data Cloud Spanner dan melaksanakan pertanyaan: 🎜rrreee

Atas ialah kandungan terperinci Interaksi antara fungsi Golang dan pangkalan data teragih dalam sistem teragih. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn