我知道了,事实证明我可以使用“ er”约定。
package goserverconst ( ROLE_KEY string = "role")type Role string//if index is higher or equal than role, will passtype RolesHierarchy []Roletype RoleChecker interface { IsRole(Role, RolesHierarchy) bool}type RoleAssumer interface { AssumeRole(ServerSession, Role)}type RoleCheckerAssumer interface { RoleChecker RoleAssumer}func (r Role) String() string { return string(r)}func NewRole(session ServerSession) Role { return session.GetValue(ROLE_KEY).(Role)}func (this Role) IsRole(role Role, hierarchy RolesHierarchy) bool { if role == this { return true } if len(hierarchy) == 0 { return false } var thisI int = 0 var roleI int = 0 //Duped roles in hierarchy are verified in verifyConfig during parse for i, r := range hierarchy { if this == r { thisI = i } if role == r { roleI = i } } //TODO I can probably condense what follows into one if if thisI == 0 && roleI == 0 { return false } return thisI >= roleI}func (this *Role) AssumeRole(session ServerSession, role Role) { session.SetValue(ROLE_KEY, role) *this = role}谢谢Sarathsp,让我正确地考虑了这一点。



