未定义(无法引用未导出的字段或方法)

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

undefined (cannot refer to unexported field or method)

问题

我正在尝试从models包中引用Users struct,并尝试从control中访问该模型。但是我遇到以下错误。

  1. controllers/user.go:87: user.create_date未定义(无法引用未导出的字段或方法create_date
  2. controllers/user.go:88: user.update_date未定义(无法引用未导出的字段或方法update_date
  3. controllers/user.go:104: user.user_id未定义(无法引用未导出的字段或方法user_id
  4. controllers/user.go:119: user.update_date未定义(无法引用未导出的字段或方法update_date
  5. controllers/user.go:136: user.user_id未定义(无法引用未导出的字段或方法user_id
  6. controllers/user.go:151: user.update_date未定义(无法引用未导出的字段或方法update_date
  7. controllers/user.go:166: user.user_id未定义(无法引用未导出的字段或方法user_id

Models.go

  1. package models
  2. import(
  3. "time"
  4. )
  5. type Users struct {
  6. user_id int `json:"user_id" form:"user_id" gorm:"column:user_id"`
  7. user_login string `json:"user_login" form:"user_login" gorm:"column:user_login"`
  8. user_email string `json:"user_email" form:"user_email" gorm:"column:user_email"`
  9. user_password string `json:"user_password" form:"user_password" gorm:"column:user_password"`
  10. user_password_salt string `json:"user_password_salt" form:"user_password_salt" gorm:"column:user_password_salt"`
  11. user_2factor_secret string `json:"user_2factor_secret" form:"user_2factor_secret" gorm:"column:user_2factor_secret"`
  12. user_fullname string `json:"user_fullname" form:"user_fullname" gorm:"column:user_fullname"`
  13. user_description string `json:"user_description" form:"user_description" gorm:"column:user_description"`
  14. user_enabled string `json:"user_enabled" form:"user_enabled" gorm:"column:user_enabled"`
  15. user_verified string `json:"user_verified" form:"user_verified" gorm:"column:user_verified"`
  16. PublisherInfoID int `json:"PublisherInfoID" form:"PublisherInfoID" gorm:"column:PublisherInfoID"`
  17. DemandCustomerInfoID int `json:"DemandCustomerInfoID" form:"DemandCustomerInfoID" gorm:"column:DemandCustomerInfoID"`
  18. create_date time.Time `json:"create_date" gorm:"column:create_date"`
  19. update_date time.Time `json:"update_date" gorm:"column:update_date"`
  20. user_permission_cache string `json:"user_permission_cache" form:"user_permission_cache" gorm:"column:user_permission_cache"`
  21. user_role int `json:"user_role" form:"user_role" gorm:"column:user_role"`
  22. }

在controllers中

  1. package controllers
  2. import (
  3. "time"
  4. "github.com/op/go-logging"
  5. "github.com/gin-gonic/gin"
  6. "github.com/jinzhu/gorm"
  7. _ "github.com/go-sql-driver/mysql"
  8. "../models"
  9. )
  10. var loguser = logging.MustGetLogger("AdsAPI")
  11. type AdsControllerUser struct {
  12. DB gorm.DB
  13. }
  14. func (ac *AdsControllerUser) SetDB(d gorm.DB) {
  15. ac.DB = d
  16. ac.DB.LogMode(true)
  17. }
  18. func (ac *AdsControllerUser) CreateUsers(c *gin.Context) {
  19. var user models.Users
  20. // This will infer what binder to use depending on the content-type header.
  21. c.Bind(&user)
  22. // Update Timestamps
  23. user.create_date = time.Now()
  24. user.update_date = time.Now()
  25. err := ac.DB.Save(&user)
  26. if err != nil {
  27. loguser.Debugf("创建用户时出错,错误为'%v'", err)
  28. res := gin.H{
  29. "status": "403",
  30. "error": "无法创建用户",
  31. }
  32. c.JSON(404, res)
  33. return
  34. }
  35. content := gin.H{
  36. "status": "201",
  37. "result": "成功",
  38. "UserID": user.user_id,
  39. }
  40. c.Writer.Header().Set("Content-Type", "application/json")
  41. c.JSON(201, content)
  42. }
  43. func (ac *AdsControllerUser) UpdateUsers(c *gin.Context) {
  44. // 获取id
  45. id := c.Params.ByName("id")
  46. var user models.Users
  47. c.Bind(&user)
  48. // 更新时间戳
  49. user.update_date = time.Now()
  50. //err := ac.DB.Model(&models.auth_User).Where("user_id = ?", id).Updates(&cm)
  51. err := ac.DB.Where("user_id = ?", id).Updates(&user)
  52. if err != nil {
  53. loguser.Debugf("更新用户时出错,错误为'%v'", err)
  54. res := gin.H{
  55. "status": "403",
  56. "error": "无法更新用户",
  57. }
  58. c.JSON(403, res)
  59. return
  60. }
  61. content := gin.H{
  62. "status": "201",
  63. "result": "成功",
  64. "UserID": user.user_id,
  65. }
  66. c.Writer.Header().Set("Content-Type", "application/json")
  67. c.JSON(201, content)
  68. }
  69. func (ac *AdsControllerUser) DeleteUsers(c *gin.Context) {
  70. // 获取id
  71. id := c.Params.ByName("id")
  72. var user models.Users
  73. c.Bind(&user)
  74. // 更新时间戳
  75. user.update_date = time.Now()
  76. err := ac.DB.Where("user_id = ?", id).Delete(&user)
  77. if err != nil {
  78. loguser.Debugf("删除用户时出错,错误为'%v'", err)
  79. res := gin.H{
  80. "status": "403",
  81. "error": "无法删除用户",
  82. }
  83. c.JSON(403, res)
  84. return
  85. }
  86. content := gin.H {
  87. "result": "成功",
  88. "UserID": user.user_id,
  89. }
  90. c.Writer.Header().Set("Content-Type", "application/json")
  91. c.JSON(201, content)
  92. }
英文:

I'm trying to refer Users struct from the models package and trying to access the model from control.But I take following errors.

  1. controllers/user.go:87: user.create_date undefined (cannot refer to unexported field or method create_date)
  2. controllers/user.go:88: user.update_date undefined (cannot refer to unexported field or method update_date)
  3. controllers/user.go:104: user.user_id undefined (cannot refer to unexported field or method user_id)
  4. controllers/user.go:119: user.update_date undefined (cannot refer to unexported field or method update_date)
  5. controllers/user.go:136: user.user_id undefined (cannot refer to unexported field or method user_id)
  6. controllers/user.go:151: user.update_date undefined (cannot refer to unexported field or method update_date)
  7. controllers/user.go:166: user.user_id undefined (cannot refer to unexported field or method user_id)

Models.go

  1. package models
  2. import(
  3. "time"
  4. )
  5. type Users struct {
  6. user_id int `json:"user_id" form:"user_id" gorm:"column:user_id"`
  7. user_login string `json:"user_login" form:"user_login" gorm:"column:user_login"`
  8. user_email string `json:"user_email" form:"user_email" gorm:"column:user_email"`
  9. user_password string `json:"user_password" form:"user_password" gorm:"column:user_password"`
  10. user_password_salt string `json:"user_password_salt" form:"user_password_salt" gorm:"column:user_password_salt"`
  11. user_2factor_secret string `json:"user_2factor_secret" form:"user_2factor_secret" gorm:"column:user_2factor_secret"`
  12. user_fullname string `json:"user_fullname" form:"user_fullname" gorm:"column:user_fullname"`
  13. user_description string `json:"user_description" form:"user_description" gorm:"column:user_description"`
  14. user_enabled string `json:"user_enabled" form:"user_enabled" gorm:"column:user_enabled"`
  15. user_verified string `json:"user_verified" form:"user_verified" gorm:"column:user_verified"`
  16. PublisherInfoID int `json:"PublisherInfoID" form:"PublisherInfoID" gorm:"column:PublisherInfoID"`
  17. DemandCustomerInfoID int `json:"DemandCustomerInfoID" form:"DemandCustomerInfoID" gorm:"column:DemandCustomerInfoID"`
  18. create_date time.Time `json:"create_date" gorm:"column:create_date"`
  19. update_date time.Time `json:"update_date" gorm:"column:update_date"`
  20. user_permission_cache string `json:"user_permission_cache" form:"user_permission_cache" gorm:"column:user_permission_cache"`
  21. user_role int `json:"user_role" form:"user_role" gorm:"column:user_role"`
  22. }

in controllers

  1. package controllers
  2. import (
  3. "time"
  4. "github.com/op/go-logging"
  5. "github.com/gin-gonic/gin"
  6. "github.com/jinzhu/gorm"
  7. _ "github.com/go-sql-driver/mysql"
  8. "../models"
  9. )
  10. var loguser = logging.MustGetLogger("AdsAPI")
  11. type AdsControllerUser struct {
  12. DB gorm.DB
  13. }
  14. func (ac *AdsControllerUser) SetDB(d gorm.DB) {
  15. ac.DB = d
  16. ac.DB.LogMode(true)
  17. }
  18. func (ac *AdsControllerUser) CreateUsers(c *gin.Context) {
  19. var user models.Users
  20. // This will infer what binder to use depending on the content-type header.
  21. c.Bind(&user)
  22. // Update Timestamps
  23. user.create_date = time.Now()
  24. user.update_date = time.Now()
  25. err := ac.DB.Save(&user)
  26. if err != nil {
  27. loguser.Debugf("Error while creating a user, the error is '%v'", err)
  28. res := gin.H{
  29. "status": "403",
  30. "error": "Unable to create user",
  31. }
  32. c.JSON(404, res)
  33. return
  34. }
  35. content := gin.H{
  36. "status": "201",
  37. "result": "Success",
  38. "UserID": user.user_id,
  39. }
  40. c.Writer.Header().Set("Content-Type", "application/json")
  41. c.JSON(201, content)
  42. }
  43. func (ac *AdsControllerUser) UpdateUsers(c *gin.Context) {
  44. // Grab id
  45. id := c.Params.ByName("id")
  46. var user models.Users
  47. c.Bind(&user)
  48. // Update Timestamps
  49. user.update_date = time.Now()
  50. //err := ac.DB.Model(&models.auth_User).Where("user_id = ?", id).Updates(&cm)
  51. err := ac.DB.Where("user_id = ?", id).Updates(&user)
  52. if err != nil {
  53. loguser.Debugf("Error while updating a user, the error is '%v'", err)
  54. res := gin.H{
  55. "status": "403",
  56. "error": "Unable to update user",
  57. }
  58. c.JSON(403, res)
  59. return
  60. }
  61. content := gin.H{
  62. "status": "201",
  63. "result": "Success",
  64. "UserID": user.user_id,
  65. }
  66. c.Writer.Header().Set("Content-Type", "application/json")
  67. c.JSON(201, content)
  68. }
  69. func (ac *AdsControllerUser) DeleteUsers(c *gin.Context) {
  70. // Grab id
  71. id := c.Params.ByName("id")
  72. var user models.Users
  73. c.Bind(&user)
  74. // Update Timestamps
  75. user.update_date = time.Now()
  76. err := ac.DB.Where("user_id = ?", id).Delete(&user)
  77. if err != nil {
  78. loguser.Debugf("Error while deleting a user, the error is '%v'", err)
  79. res := gin.H{
  80. "status": "403",
  81. "error": "Unable to delete user",
  82. }
  83. c.JSON(403, res)
  84. return
  85. }
  86. content := gin.H {
  87. "result": "Success",
  88. "UserID": user.user_id,
  89. }
  90. c.Writer.Header().Set("Content-Type", "application/json")
  91. c.JSON(201, content)
  92. }

答案1

得分: 22

在另一个包中引用结构体时,对导出字段使用大写字母。

  1. package models
  2. import (
  3. "time"
  4. )
  5. type Users struct {
  6. ID int `json:"user_id" form:"user_id" gorm:"column:user_id"`
  7. Login string `json:"user_login" form:"user_login" gorm:"column:user_login"`
  8. Email string `json:"user_email" form:"user_email" gorm:"column:user_email"`
  9. Password string `json:"user_password" form:"user_password" gorm:"column:user_password"`
  10. PasswordSalt string `json:"user_password_salt" form:"user_password_salt" gorm:"column:user_password_salt"`
  11. TwoFactorSecret string `json:"user_2factor_secret" form:"user_2factor_secret" gorm:"column:user_2factor_secret"`
  12. Fullname string `json:"user_fullname" form:"user_fullname" gorm:"column:user_fullname"`
  13. Description string `json:"user_description" form:"user_description" gorm:"column:user_description"`
  14. Enabled string `json:"user_enabled" form:"user_enabled" gorm:"column:user_enabled"`
  15. Verified string `json:"user_verified" form:"user_verified" gorm:"column:user_verified"`
  16. PublisherInfoID int `json:"PublisherInfoID" form:"PublisherInfoID" gorm:"column:PublisherInfoID"`
  17. DemandCustomerInfoID int `json:"DemandCustomerInfoID" form:"DemandCustomerInfoID" gorm:"column:DemandCustomerInfoID"`
  18. CreateDate time.Time `json:"create_date" gorm:"column:create_date"`
  19. UpdateDate time.Time `json:"update_date" gorm:"column:update_date"`
  20. PermissionCache string `json:"user_permission_cache" form:"user_permission_cache" gorm:"column:user_permission_cache"`
  21. Role int `json:"user_role" form:"user_role" gorm:"column:user_role"`
  22. }

现在可以使用 Users.ID 来获取字段。

英文:

Use Capitals for exported fields in struct, when referring struct in another package.

  1. package models
  2. import (
  3. "time"
  4. )
  5. type Users struct {
  6. ID int `json:"user_id" form:"user_id" gorm:"column:user_id"`
  7. Login string `json:"user_login" form:"user_login" gorm:"column:user_login"`
  8. Email string `json:"user_email" form:"user_email" gorm:"column:user_email"`
  9. Password string `json:"user_password" form:"user_password" gorm:"column:user_password"`
  10. PasswordSalt string `json:"user_password_salt" form:"user_password_salt" gorm:"column:user_password_salt"`
  11. TwoFactorSecret string `json:"user_2factor_secret" form:"user_2factor_secret" gorm:"column:user_2factor_secret"`
  12. Fullname string `json:"user_fullname" form:"user_fullname" gorm:"column:user_fullname"`
  13. Description string `json:"user_description" form:"user_description" gorm:"column:user_description"`
  14. Enabled string `json:"user_enabled" form:"user_enabled" gorm:"column:user_enabled"`
  15. Verified string `json:"user_verified" form:"user_verified" gorm:"column:user_verified"`
  16. PublisherInfoID int `json:"PublisherInfoID" form:"PublisherInfoID" gorm:"column:PublisherInfoID"`
  17. DemandCustomerInfoID int `json:"DemandCustomerInfoID" form:"DemandCustomerInfoID" gorm:"column:DemandCustomerInfoID"`
  18. CreateDate time.Time `json:"create_date" gorm:"column:create_date"`
  19. UpdateDate time.Time `json:"update_date" gorm:"column:update_date"`
  20. PermissionCache string `json:"user_permission_cache" form:"user_permission_cache" gorm:"column:user_permission_cache"`
  21. Role int `json:"user_role" form:"user_role" gorm:"column:user_role"`
  22. }

Now do Users.ID to get fields.

huangapple
  • 本文由 发表于 2016年3月5日 15:05:17
  • 转载请务必保留本文链接:https://go.coder-hub.com/35811215.html
匿名

发表评论

匿名网友

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

确定