您正在寻找一种称为ORM(对象关系映射器)的东西.有一些围棋,但最受欢迎的是GORM.这是一个有点有争议的话题,但我认为如果您是Go和/或数据库的新手,使用ORM是一个好主意.这将为你节省大量的时间和精力.
另一种方法是使用数据库/SQL包并编写您自己的SQL查询.如果您是一名经验丰富的围棋开发人员和/或数据库管理员,这是一个好主意.它将使您能够更好地控制您的查询,并将更加高效.推荐读数:https://www.alexedwards.net/blog/organising-database-access.此方法建议使用的库包括SQLx和PGx.
下面是作为GORM模型的 struct :
type Patient struct {
ID int `gorm:"primaryKey"`
Name string
Image string
}
下面是一个如何将患者插入数据库的示 routine 序:
package main
import (
"fmt"
"gorm.io/driver/postgres"
"gorm.io/gorm"
)
type Patient struct {
ID int `gorm:"primaryKey"`
Name string
Image string
}
func main() {
dsn := "host=localhost user=postgres password=postgres dbname=postgres port=5432 sslmode=disable TimeZone=UTC"
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
db.AutoMigrate(&Patient{})
patient := Patient{
Name: "John Smith",
Image: "https://example.com/image.png",
}
result := db.Create(&patient)
if result.Error != nil {
panic(result.Error)
}
fmt.Println(patient)
}
如果您想要使用SQLX,您可以编写如下代码:
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/lib/pq"
)
type Patient struct {
ID int
Name string
Image string
}
func main() {
dsn := "host=localhost user=postgres password=postgres dbname=postgres port=5432 sslmode=disable TimeZone=UTC"
db, err := sql.Open("postgres", dsn)
if err != nil {
log.Fatal(err)
}
defer db.Close()
_, err = db.Exec(`
CREATE TABLE IF NOT EXISTS patients (
id SERIAL PRIMARY KEY,
name TEXT,
image TEXT
)
`)
if err != nil {
log.Fatal(err)
}
patient := Patient{
Name: "John Smith",
Image: "https://example.com/image.png",
}
_, err = db.Exec(`
INSERT INTO patients (name, image) VALUES ($1, $2)
`, patient.Name, patient.Image)
if err != nil {
log.Fatal(err)
}
fmt.Println(patient)
}
当然,使用ORM管理数据库模式会稍微复杂一些.您可以使用迁移,但我更喜欢使用名为GOOSE的工具.设置它有点麻烦,但它非常强大和灵活.下面是一个如何使用它的示例:
package main
import (
"fmt"
"log"
"github.com/pressly/goose"
"gorm.io/driver/postgres"
"gorm.io/gorm"
)
type Patient struct {
ID int `gorm:"primaryKey"`
Name string
Image string
}
func main() {
dsn := "host=localhost user=postgres password=postgres dbname=postgres port=5432 sslmode=disable TimeZone=UTC"
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
goose.SetDialect("postgres")
goose.SetTableName("schema_migrations")
err = goose.Run("up", db.DB(), "migrations")
if err != nil {
log.Fatal(err)
}
patient := Patient{
Name: "John Smith",
Image: "https://example.com/image.png",
}
result := db.Create(&patient)
if result.Error != nil {
panic(result.Error)
}
fmt.Println(patient)
}
其中您的迁移目录如下所示:
migrations/
00001_create_patients.up.sql
00001_create_patients.down.sql
您的迁移如下所示:
-- 00001_create_patients.up.sql
CREATE TABLE patients (
id SERIAL PRIMARY KEY,
name TEXT,
image TEXT
);
-- 00001_create_patients.down.sql
DROP TABLE patients;
我希望这能帮到你!如果你有什么问题就告诉我.