Я новичок в Голанге и мне нужна помощь.Я пытаюсь создать веб-сервис REST API без ORM.
Сейчас я успешно подключен к базе данных PostgreSQL .В базе данных у меня есть таблица, которая называется factors
.Я хочу создавать операции CRUD.Проблема в логике контроллеров.
main.go :
package main
import (
"github.com/gorilla/mux"
"log"
"net/http"
"rest_api/configurations"
"rest_api/controllers"
)
func main() {
db, err := configurations.PostgreSQLDatabase()
if err != nil {
log.Fatal(err)
}
router := mux.NewRouter()
router.StrictSlash(true)
subrouter := router.PathPrefix("/api").Subrouter()
subrouter.HandleFunc("/factors", controllers.GetFactors(db)).Methods("GET")
log.Fatal(http.ListenAndServe(":8000", router))
}
models / factor.go :
package models
type Factor struct {
ID int `json:"id"`
Name string `json:"name"`
}
Как правильно выглядит контроллер GetFactors
?Может кто-нибудь показать мне, пожалуйста.Например, я передаю объект db
контроллеру GetFactors
, как в примере ниже.К сожалению, похоже, что это неверно.
controllers / factor.go :
func GetFactors(db *sql.DB, w http.ResponseWriter, req *http.Request) {
// some code
}
конфигурации / PostgreSQL.go :
func PostgreSQLDatabase() (*sql.DB, error) {
// Load environment variables from ".env" file.
err := godotenv.Load(".env")
if err != nil {
log.Fatal(err)
}
// Initialize database-related variables.
dbUser := os.Getenv("PostgreSQL_USER")
dbPassword := os.Getenv("PostgreSQL_PASSWORD")
dbHost := os.Getenv("PostgreSQL_HOST")
dbName := os.Getenv("PostgreSQL_DB_NAME")
dbURL := fmt.Sprintf("user=%s password=%s host=%s dbname=%s sslmode=disable", dbUser, dbPassword, dbHost, dbName)
// Create PostgreSQL database connection pool.
db, err := sql.Open("postgres", dbURL)
if err != nil {
return nil, err
}
// Ping PostgreSQL database to make sure it's alive.
err = db.Ping()
if err != nil {
log.Fatal(err)
} else {
log.Println("Web service successfully connected to remote PostgreSQL database.")
}
return db, nil
}