我将发布我的代码:
/* * Role will ALWAYS reserve the session key "role". */ package goserver const ( ROLE_KEY string = "role" ) type Role string //if index is higher or equal than role, will pass type RolesHierarchy []Role 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 }
应该注意的是,ServerSession也是一个接口,对我来说,调用“ ServerSessioner”是一种感觉。
我正在玩用IsRole()和AssumeRole()创建接口的想法,但是“ Roler”似乎很奇怪。我突然意识到,除了标准的“ er”后缀之外,我真的不知道或者从未遇到过接口的命名约定。我确实记得VS C ++约定是在所有内容前都加上“ I”。这是“惯用的”吗?
有什么建议?
我知道了,事实证明我可以使用“ er”约定。
/* * Role will ALWAYS reserve the session key "role". */ package goserver const ( ROLE_KEY string = "role" ) type Role string //if index is higher or equal than role, will pass type RolesHierarchy []Role type 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,让我正确地考虑了这一点。