Go语言 Web API: 多接口请求数据库查询并返回多个值
以下是一个简单的 Go 语言 Web 应用程序,可以进行多个接口请求并返回多个值:
package main
import (
"database/sql"
"encoding/json"
"log"
"net/http"
"github.com/gorilla/mux"
_ "github.com/mattn/go-sqlite3"
)
type User struct {
ID int `json:"id"`
Name string `json:"name"`
Email string `json:"email"`
Password string `json:"password"`
}
type Response struct {
Users []User `json:"users"`
}
func main() {
db, err := sql.Open("sqlite3", "./users.db")
if err != nil {
log.Fatal(err)
}
defer db.Close()
router := mux.NewRouter()
router.HandleFunc("/users", func(w http.ResponseWriter, r *http.Request) {
rows, err := db.Query("SELECT * FROM users")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
response := Response{}
for rows.Next() {
user := User{}
err := rows.Scan(&user.ID, &user.Name, &user.Email, &user.Password)
if err != nil {
log.Fatal(err)
}
response.Users = append(response.Users, user)
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(response)
}).Methods("GET")
router.HandleFunc("/users/{id}", func(w http.ResponseWriter, r *http.Request) {
params := mux.Vars(r)
id := params["id"]
row := db.QueryRow("SELECT * FROM users WHERE id=?", id)
user := User{}
err := row.Scan(&user.ID, &user.Name, &user.Email, &user.Password)
if err != nil {
log.Fatal(err)
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(user)
}).Methods("GET")
log.Fatal(http.ListenAndServe(":8080", router))
}
这个应用程序有两个接口:
/users:返回所有用户的列表。/users/{id}:返回具有特定ID的用户。
在这个例子中,我们使用了一个 SQLite3 数据库,但是你可以使用其他任何数据库。
你可以使用以下命令来运行此程序:
go run main.go
现在,你可以使用浏览器或任何 HTTP 客户端来访问这些接口,并查看返回的 JSON 数据。
例如,访问http://localhost:8080/users将返回所有用户的列表。
原文地址: https://www.cveoy.top/t/topic/ojpF 著作权归作者所有。请勿转载和采集!