reflect: NumField of non-struct type,這是怎麼回事?

dyllen發表於2017-08-26

我定義了一個 user model:

type User struct {
    Id            uint      `model:"id"`
    Username      string    `model:"username"`
    MobileNo      string    `model:"mobile_no"`
    Password      string    `model:"password"`
    Email         string    `model:"email"`
    EmailVerified uint8     `model:"email_verified"`
    CreateTime    string    `model:"create_time"`
    UpdateTime    string    `model:"uptime_time"`
}

func (user *User) TableName() string {
    return "user"
}

這個 user model 有實現一個 baseModel 介面。

然後我查詢資料:

user := &model.User{}
db.BuildCommand(user).FindOne()

BuildCommand:

type Command struct {
    model  BaseModel
    sql    string  //最終的SQL語句
    selt   string  //sql 的select
    from   string
    where  string
    limit  int
    offset int
}

var c *Command

func BuildCommand(m BaseModel) *Command {
    if c == nil {
        c = &Command{
            model: m,
        }
    } else {
        c.model = m
    }
    return c
}

然後我在把查詢出來的資料寫到 user model 裡面的時候,反射 user model 結構報錯了。 panic serving [::1]:50250: reflect: NumField of non-struct type

//....
//這裡的q就是上面的*Command
refValue := reflect.ValueOf(q.model)
refType := refValue.Type()
//....
//就下面這一行報錯的。
log.Fatalln(refType.NumField())
//.....

這是怎麼回事?

更多原創文章乾貨分享,請關注公眾號
  • reflect: NumField of non-struct type,這是怎麼回事?
  • 加微信實戰群請加微信(註明:實戰群):gocnio

相關文章