如何使用sqlx获取字符串切片?

问题描述 投票:0回答:1

我是glang新手,我想使用sqlx查询Mysql以获取要作为JSON发送的字符串切片。 我知道如何得到这样的结果:

type MediaURI struct {
    URI string `db:"uri" json:"uri"`
}


func MediaHandler(c *gin.Context) {
    var err error
    pid := c.PostForm("pid")
    var medias []MediaURI
    err = shared.Dbmap.Select(&medias, "SELECT uri FROM media WHERE post_id = ? ORDER BY created_at DESC ", pid)
    if err != nil {
        log.Println(err)
        return
    }
    c.JSON(http.StatusOK, gin.H{"mediaUrls": medias})
}

但这给出了像这样的结构切片:

媒体为:[{/media/photos/55/abc.png} {/media/photos/55/def.jpg} {/media/photos/55/gdx.png}]

我想知道如何直接获取字符串?我看过 docs 但答案(如果有的话)我不清楚。

go go-gin sqlx
1个回答
0
投票

你可以尝试这样的事情:

要使用 sqlx 从 MySQL 查询返回字符串片段并将其作为 JSON 发送,您可以按照以下步骤操作:

直接以字符串形式检索 uri 值并从中构建切片。 使用 gin.Context 的 JSON 方法将此切片作为 JSON 返回。

package main

import (
    "log"
    "net/http"

    "github.com/gin-gonic/gin"
    "github.com/jmoiron/sqlx"
    _ "github.com/go-sql-driver/mysql"  // MySQL driver import
)

var db *sqlx.DB

func init() {
    var err error
    // Initialize database connection. Replace with your database credentials.
    db, err = sqlx.Open("mysql", "user:password@tcp(127.0.0.1:3306)/yourdatabase")
    if err != nil {
        log.Fatal("Failed to connect to the database:", err)
    }
}

func MediaHandler(c *gin.Context) {
    pid := c.PostForm("pid")

    // Prepare query
    query := "SELECT uri FROM media WHERE post_id = ? ORDER BY created_at DESC"

    // Retrieve a list of URIs directly as strings
    var mediaURIs []string
    err := db.Select(&mediaURIs, query, pid)
    if err != nil {
        log.Println("Failed to query media URIs:", err)
        c.JSON(http.StatusInternalServerError, gin.H{"error": "Unable to retrieve media URIs"})
        return
    }

    // Return the URIs as a JSON array
    c.JSON(http.StatusOK, gin.H{"mediaUrls": mediaURIs})
}

func main() {
    r := gin.Default()

    // Define a route and associate the handler
    r.POST("/media", MediaHandler)

    // Start the server
    r.Run(":8080")
}

如果有帮助请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.