Соглашение об именах интерфейсов 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 ++ состоит в том, чтобы просто бросить «я» перед всем. Это "идиоматический"?

Какие-либо предложения?

Ответы на вопрос(3)

Ваш ответ на вопрос