无法在现有用户上设置电子邮件(使用Golang)。

huangapple go评论114阅读模式
英文:

can't have email on existing user golang

问题

我正在尝试检查用户是否已经拥有电子邮件。我写了一个类似这样的函数:

  1. func IsUniqueEmail(body io.ReadCloser) (database.User, error) {
  2. connection := database.GetDatabase()
  3. defer database.CloseDatabase(connection)
  4. var user database.User
  5. err := json.NewDecoder(body).Decode(&user)
  6. if err != nil {
  7. return user, err
  8. }
  9. var dbuser database.User
  10. connection.Where("email = ?", user.Email).First(&dbuser)
  11. fmt.Println("User: ", dbuser)
  12. fmt.Println("User: ", dbuser.Email)
  13. return dbuser, nil
  14. }

但是 fmt.Println 显示给我:

  1. User: {{0 0001-01-01 00:00:00 +0000 UTC 0001-01-01 00:00:00 +0000 UTC <nil>} }

我假设 dbuser 中没有电子邮件,但我无法理解为什么。有人有想法吗?谢谢。

英文:

I'm trying to check if an user already have a email. I wrote a function like this :

  1. func IsUniqueEmail(body io.ReadCloser) (database.User, error) {
  2. connection := database.GetDatabase()
  3. defer database.CloseDatabase(connection)
  4. var user database.User
  5. err := json.NewDecoder(body).Decode(&amp;user)
  6. if err != nil {
  7. return user, err
  8. }
  9. var dbuser database.User
  10. connection.Where(&quot;email = ?&quot;, user.Email).First(&amp;dbuser)
  11. fmt.Println(&quot;User: &quot;, dbuser)
  12. fmt.Println(&quot;User: &quot;, dbuser.Email)
  13. return dbuser, nil}

but the fmt.Println show me

> User: {{0 0001-01-01 00:00:00 +0000 UTC 0001-01-01 00:00:00 +0000 UTC <nil>} }

I assume where is no email in dbuser but I can't understand why
anyone have an idea ?
Cheers

答案1

得分: 1

如果你正在使用 gorm v2,你可以捕获记录未找到的错误。

  1. var dbuser database.User
  2. err := connection.Where("email = ?", user.Email).First(&dbuser).Error
  3. if errors.Is(err, gorm.ErrRecordNotFound) {
  4. return dbuser, err
  5. }
  6. fmt.Println("User: ", dbuser)
  7. fmt.Println("User: ", dbuser.Email)
  8. return dbuser, nil

请注意,这是一个示例代码片段,用于在使用 gorm v2 时捕获记录未找到的错误。你可以根据自己的需求进行修改和适配。

英文:

If you are using gorm v2, you can catch the record not found error

  1. var dbuser database.User
  2. err := connection.Where(&quot;email = ?&quot;, user.Email).First(&amp;dbuser).Error
  3. if errors.Is(err, gorm.ErrRecordNotFound) {
  4. return dbuser, err
  5. }
  6. fmt.Println(&quot;User: &quot;, dbuser)
  7. fmt.Println(&quot;User: &quot;, dbuser.Email)
  8. return dbuser, nil}

答案2

得分: 0

解决方案

  1. func IsUniqueEmail(body io.ReadCloser) (database.User, bool, error) {
  2. var dbuser database.User
  3. connection := database.GetDatabase()
  4. defer database.CloseDatabase(connection)
  5. var user database.User
  6. err := json.NewDecoder(body).Decode(&user)
  7. if err != nil {
  8. return user, false, err
  9. }
  10. errDB := connection.Where("email = ?", user.Email).First(&dbuser).Error
  11. if errors.Is(errDB, gorm.ErrRecordNotFound) {
  12. return dbuser, true, errDB
  13. }
  14. if dbuser.Email != "" {
  15. return dbuser, false, nil
  16. }
  17. return user, true, nil
  18. }
英文:

The solution

  1. func IsUniqueEmail(body io.ReadCloser) (database.User, bool, error) {
  2. var dbuser database.User
  3. connection := database.GetDatabase()
  4. defer database.CloseDatabase(connection)
  5. var user database.User
  6. err := json.NewDecoder(body).Decode(&amp;user)
  7. if err != nil {
  8. return user, false, err
  9. }
  10. errDB := connection.Where(&quot;email = ?&quot;, user.Email).First(&amp;dbuser).Error
  11. if errors.Is(errDB, gorm.ErrRecordNotFound) {
  12. return dbuser, true, errDB
  13. }
  14. if dbuser.Email != &quot;&quot; {
  15. return dbuser, false, nil
  16. }
  17. return user, true, nil
  18. }

huangapple
  • 本文由 发表于 2022年5月14日 07:33:44
  • 转载请务必保留本文链接:https://go.coder-hub.com/72236264.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定