Да ! Спасибо ! Я начал изучать его около 4 часов назад, но еще не узнал о типе интерфейса, я немного прочту об этом.
ня я только начинаю изучать GoLang, я пытаюсь создать простой веб-сервер Rest API.
Вот ответ Struct, который я хочу отправить на каждый запрос к веб-серверу:
package main
type HttpResp struct{
Status int `json:"status"`
Description string `json:"description"`
Body string `json:"body"`
}
И вот мойarticles.go файл, у которого есть функция, которая получает все статьи в базе данных:
package main
import (
"encoding/json"
"net/http"
"log"
)
type Article struct{
Id string `json:"id"`
Title string `json:"title"`
Body string `json:"body"`
Description string `json:"description"`
}
func AllArticles(w http.ResponseWriter, r *http.Request){
log.Print("/articles - GET")
db := connect()
defer db.Close()
var articles []Article
results, err := db.Query("SELECT * FROM Articles")
if err != nil{
log.Print(err)
return
}
for results.Next(){
var article Article
err = results.Scan(&article.Title, &article.Description, &article.Body, &article.Id)
if err != nil{
serr, _ := json.Marshal(err)
json.NewEncoder(w).Encode(HttpResp{Status: 500, Description: "Failed to retrieve all articles", Body: string(serr)})
}
articles = append(articles, article)
}
sarr, _ := json.Marshal(articles)
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(HttpResp{Status: 200, Body: string(sarr)})
}
Проблема, с которой я здесь сталкиваюсь, заключается в том, что ответ таков:
{ "Статус": 200, "Описание": "", "тело": "[{\" идентификатор \ ": \" 1 \», \ "TITLE \": \ "Первый \", \ "тело \" : \ "Это тестовое тело \", \ "description \": \ "Это тестовое сообщение \"}] "}
Я бы хотел, чтобы тело было просто JSON, а не строкой. Как я могу достичь этого?