我是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 但答案(如果有的话)我不清楚。
你可以尝试这样的事情:
要使用 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")
}
如果有帮助请告诉我。