Последние 38 часов я изучаю голанг и кодирую это.Это то, что делает этот код.
Код golang ниже отображает две записи из базы данных в массиве через json.На данный момент это ответ json, который я получаю, когда я запускаю код, и пока все в порядке ..
[
{"id":"1",
"title":"Post Title 1 ",
"content":"post content 1."
},
{"id":"2",
"title":"post Title 2 ",
"content":"post content 2 "
}
]
На данный момент postlikeCount и postunlikeCount не выбираются в массиве, потому что они находятся в другой таблице.
Если все работает нормально, я должен получить такой массив, который содержит все, как показано в примере ниже.
[
{"id":"1",
"title":"Post Title 1 ",
"content":"post content 1.",
"postlikeCount":"2",
"postunlikeCount":"1"},
{"id":"2",
"title":"post Title 2 ",
"content":"post content 2 ",
"postlikeCount":"4",
"postunlikeCount":"0"}
]
Теперьчтобы получить postlikeCount и postunlikeCount , я реализовал две секции кодировок, ниже которых я прошел в post for rows.next() functions
.
// get postlikeCount based on userid and postid
var userid =5
var postlikeCount int
err := db.QueryRow("SELECT COUNT(*) as postlikeCount FROM postData WHERE postid=? and userid=?", postid,userid).Scan(&postlikeCount)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Number of postlikeCount rows are %s\n", postlikeCount)
// get postunlikeCount based on userid and postid
var postunlikeCount int
err1 := db.QueryRow("SELECT COUNT(*) as postunlikeCount FROM postData WHERE postid=? and userid=?", postid,userid).Scan(&postunlikeCount)
if err1 != nil {
log.Fatal(err1)
}
fmt.Printf("Number of postunlikeCount rows are %s\n", postunlikeCount)
Два вышеуказанных кода работают нормальнокак я могу напечатать их соответствующие сообщения, как и в отличие от счета.
Вот моя проблема:
Когда я пытался пройти и добавить postlikeCount и postunlikeCount параметров, чтобы я мог распечатать их в формате json согласно этой строке кода
posts = append(posts, post, postlikeCount,postunlikeCount)
Отображается ошибка
cannot postlikeCount (type int) as type post in append
cannot use postunlikeCount (type int) as type post in append
Должна ли эта ошибка иметьс функцией Struct.Пожалуйста, может кто-нибудь помочь мне исправить это.Мне нужно передать postlikeCount и postunlikeCount как часть json, как видно из полного результата массива выше.
вот полный рабочий код на данный момент.
package main
import "database/sql"
import _ "github.com/go-sql-driver/mysql"
import "net/http"
import "fmt"
import "encoding/json"
import "log"
var db *sql.DB
var err error
type Post struct {
Id int
Title string
Content string
}
func getRecordPage1(res http.ResponseWriter, req *http.Request) {
if req.Method != "POST" {
http.ServeFile(res, req, "getjsonRecord.html")
return
}
var (
post Post
posts []Post
)
rows, err := db.Query("SELECT id,title,content FROM posts")
if err != nil {
http.Error(res, "display error, unable to select records in json", 500)
return
}
for rows.Next() {
var postid =post.Id
var title = post.Title
var content = post.Content
fmt.Printf("%s is now %d\n", postid, title, content)
// get postlikeCount based on userid and postid
var userid =5
var postlikeCount int
err := db.QueryRow("SELECT COUNT(*) as postlikeCount FROM postData WHERE postid=? and userid=?", postid,userid).Scan(&postlikeCount)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Number of postlikeCount rows are %s\n", postlikeCount)
// get postunlikeCount based on userid and postid
var postunlikeCount int
err1 := db.QueryRow("SELECT COUNT(*) as postunlikeCount FROM postData WHERE postid=? and userid=?", postid,userid).Scan(&postunlikeCount)
if err1 != nil {
log.Fatal(err1)
}
fmt.Printf("Number of postunlikeCount rows are %s\n", postunlikeCount)
rows.Scan(&post.Id, &post.Title, &post.Content)
posts = append(posts, post)
//like of code comment which causes issues
//posts = append(posts, post,postlikeCount,postunlikeCount)
}
defer rows.Close()
jsonResponse, jsonError := json.Marshal(posts)
if jsonError != nil {
fmt.Println(jsonError)
}
if jsonResponse == nil {
fmt.Println(jsonError)
} else {
res.Header().Set("Content-Type", "application/json")
res.Write(jsonResponse)
fmt.Println("Json results displayed successfully")
}
}
func homePage(res http.ResponseWriter, req *http.Request) {
http.ServeFile(res, req, "index.html")
}
func main() {
db, err = sql.Open("mysql", "root:@/golang44")
if err != nil {
panic(err.Error())
}
defer db.Close()
err = db.Ping()
if err != nil {
panic(err.Error())
}
http.HandleFunc("/getjsonRecord", getRecordPage1)
http.HandleFunc("/", homePage)
fmt.Println("Listening on 127.0.0.1:8088")
http.ListenAndServe(":8088", nil)
}