我有一个访问权限列表:

const (
    Everyone = 0
    Owner = 1
    Administrator = 2
)

还有一个表示Routes的结构:
type Route struct {
    Name        string
    Method      string
    Pattern     string
    HandlerFunc http.HandlerFunc
    AccessLevel uint64
}

如何限制AccessLevel结构的Route字段值为上面的那些const之一?

最佳答案

施加这种限制的唯一方法是不导出字段,并以任何设置方法进行检查。

type Route struct {
    Name        string
    Method      string
    Pattern     string
    HandlerFunc http.HandlerFunc
    accessLevel uint64
}

// AccessLevel getter method
func (r Route) AccessLevel() uint64 {
  return r.accessLevel
}

// SetAccessLevel setter method
func (r Route) SetAccessLevel(value uint64) error {
    if value < 0 || value > 2 {
        return errors.New("AccessLevel must be between 0 and 2, inclusive")
    }
    r.accessLevel = value
    return nil
}

关于go - 如何使结构域成为列表中的值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42433162/

10-12 02:25