Я очень новичок, поэтому надеюсь, что это просто исправить. Я хочу построить значение JSON из строк в базе данных SQL. Это не должен быть SQL, но я ищу способ создания списка структур или контейнера, который содержит много значений, чтобы генерировать JSON.Создайте JSON из результата SQL для API
Например, запрос HTTP GET для «/ пост» вернется:
{
"posts": [
{ "title": "First title", "created_by": "User1" },
{ "title": "My second post", "created_by": "User1"}
]
}
Я не знаю, что это правильный способ сделать это. Я пробовал другие способы, используя массив указателей, но это не получается правильно. До сих пор она выдает правильные значения для каждой структуры, но в результате маршал пуст [{},{},{}]
Пожалуйста, полегче на меня :)
example.go
package main
import (
"fmt"
"encoding/json"
"time"
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
type Post struct {
name string `json:"name"`
created_by string `json:"created_by"`
created_at time.Time `json:"created_at"`
}
type Posts []Post
func main() {
db, err := sql.Open("mysql", "root:[email protected]/blog?parseTime=true")
if err != nil { panic(err.Error()) }
defer db.Close()
err = db.Ping()
if err != nil { panic(err.Error()) }
rows, err := db.Query("select title, created_by, created_at from post")
if err != nil { panic(err.Error()) }
defer rows.Close()
var posts Posts
for rows.Next() {
var post Post
err := rows.Scan(&post.name, &post.created_by, &post.created_at)
if err != nil { panic(err.Error()) }
fmt.Printf("name=%s, created_by=%s, created_at=%s\n", post.name, post.created_by, post.created_at)
posts = append(posts, post)
}
data, err := json.Marshal(posts)
if err != nil { panic(err.Error()) }
fmt.Printf("%s\n", data)
}
Я просто пытался маршалировать одну почту, и это тоже не работает. Я что-то упускаю. – incognick