Я просто разместить свой код:Интерфейс именования Golang
/*
* 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++ - это просто бросить «я» перед всем. Является ли это «идиоматическим»?
Любые предложения?
Я бы назвал это 'RoleSupport', но для английского языка это было бы интересным делом. Пожалуйста, подумайте над тем, чтобы не использовать 'this' для обозначения приемников методов: это неодобрительно, как унииоматическое Go. [Один пример] (http://stackoverflow.com/q/23482068/720999) обсуждения этих вопросов. – kostix
Да, я боролся с именами приемников. Я знаю, что идиотский ход - использовать однобуквенные переменные ... Извините, я не могу этого сделать. «это» или «я» настолько распространено на каком-либо другом языке, что это неоднозначно. «RoleSupport» в порядке, но на самом деле не подходит аккуратный шаблон. – Dale
Не одиночные буквы, а довольно значимые сокращения - с единственными буквами в порядке для коротких функций (включая ваши). «Любой другой язык» - это полная преувеличение.Ну, по какой-то причине это не проблема для меня: разные языки просто * чувствуют * по-разному. Новички-программисты действительно стараются быть однокристскими собаками, которые пытаются нести свой набор изученных навыков на любой новый язык, с которым они сталкиваются (были там сами наверняка), но всегда лучше понимать философию языка и придерживаться его. – kostix