我想使用mgo创建/保存MongoDB集合。但是我想更广泛地定义它(例如,要提到其中一个属性是强制性的,另一个则是枚举类型并具有默认值)。

我已经定义了这样的结构,但是不知道如何描述它的约束。

type Company struct {
    Name        string `json:"name" bson:"name"` // --> I WANT THIS TO BE MANDATORY
    CompanyType string `json:"companyType" bson:"companyType"` // -->I WANT THIS TO BE AN ENUM
}

是否可以在mgo中完成,就像我们在MongooseJS中如何做到一样?

最佳答案

mgo不是ORM或验证工具。 mgo只是MongoDB的接口。

独自进行验证也不错。

type CompanyType int

const (
  CompanyA CompanyType = iota // this is the default
  CompanyB CompanyType
  CompanyC CompanyType
)

type Company struct {
  Name string
  CompanyType string
}

func (c Company) Valid() bool {
  if c.Name == "" {
    return false
  }
  // If it's a user input, you'd want to validate CompanyType's underlying
  // integer isn't out of the enum's range.
  if c.CompanyType < CompanyA || c.CompanyType > CompanyB {
    return false
  }
  return true
}

查看this以获得有关Go中枚举的更多信息。

10-06 14:20