gpt4 book ai didi

go - db.First() 不使用主键名

转载 作者:行者123 更新时间:2023-12-03 10:10:12 25 4
gpt4 key购买 nike

我正在编写一些示例代码来理解 gorm但似乎在设置 primary_key 时遇到问题值(value)。结果,生成的 SQL 查询被破坏。
请看示例代码:
包主

import (
"os"
"fmt"
"time"
"gorm.io/driver/postgres"
"gorm.io/gorm"
)

type Post struct {
id int `json:"id" gorm:"primary_key:id"`
url string `gorm:"url"`
content string `gorm:"content"`
created_at time.Time `gorm:"created_at"`
normalized string `gorm:"normalized"`
account_id int `gorm:"account_id"`
posthash []byte `gorm:"posthash"`
received_at time.Time `gorm:"received_at"`
}

func main() {
dsn := "user=postgres dbname=localtest"
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
if err != nil {
fmt.Println("An error occurred", err)
os.Exit(1)
}

db.AutoMigrate(&Post{})
var post Post
db.First(&post, 1)
fmt.Println(post)
}
当我运行此代码时,我收到以下错误:
$ go run gorm_test.go

2020/12/01 00:34:06 /home/farhan/gorm_test.go:32 ERROR: syntax error at or near "=" (SQLSTATE 42601)
[0.128ms] [rows:0] SELECT * FROM "posts" WHERE "posts". = 1 ORDER BY "posts". LIMIT 1
{0 {0 0 <nil>} 0 [] {0 0 <nil>}}
这个错误的性质向我表明 primary_key值未设置。我试过 primaryKeyprimarykey ,但似乎没有一个工作。有任何想法吗?

最佳答案

@Shubham Srivastava - Your structure declaration is bad; you need to export fields so gorm can use them Declaring Models


❗️使用 导出 ID field
在 Go 中,当字段名称以小写字母开头时,表示该字段是私有(private)的(在 Go 用语中称为未导出)。 Gorm,作为第三方包,看不到你的结构内部知道有一个 id字段,或任何其他未导出的字段。
解决方案是确保导出需要来自数据库的所有字段:
type Post struct {
ID uint `json:"id" gorm:"primaryKey"`
...
}

关于go - db.First() 不使用主键名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65085256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com