Golang sqlx 返回多个结果

Certainly! When working with sqlx in Go to handle multiple result sets, you can use the sqlx.Rows type to iterate over the results. Here's an example to illustrate how you can achieve this:

package main

import (
    "database/sql"
    "fmt"
    "log"

    _ "github.com/go-sql-driver/mysql"
    "github.com/jmoiron/sqlx"

)

type User struct {
    ID   int    `db:"id"`
    Name string `db:"name"`
}

type Order struct {
    ID     int    `db:"id"`
    UserID int    `db:"user_id"`
    Amount float64 `db:"amount"`
}

func main() {
    // Connect to the database
    db, err := sqlx.Connect("mysql", "user:password@tcp(127.0.0.1:3306)/dbname")
    if err != nil {
        log.Fatalln(err)
    }

    // Query with multiple result sets
    query := `
        SELECT id, name FROM users;
        SELECT id, user_id, amount FROM orders;
    `
    rows, err := db.Queryx(query)
    if err != nil {
        log.Fatalln(err)
    }
    defer rows.Close()

    // Process the first result set
    var users []User
    for rows.Next() {
        var user User
        if err := rows.StructScan(&user); err != nil {
            log.Fatalln(err)
        }
        users = append(users, user)
    }

    // Move to the next result set
    if rows.NextResultSet() {
        var orders []Order
        for rows.Next() {
            var order Order
            if err := rows.StructScan(&order); err != nil {
                log.Fatalln(err)
            }
            orders = append(orders, order)
        }

        // Output the results
        fmt.Println("Users:", users)
        fmt.Println("Orders:", orders)
    } else {
        log.Println("No more result sets")
    }

}

Explanation:

This example demonstrates how to handle multiple result sets using sqlx in Go. Adjust the query and struct definitions as needed for your specific use case.