Interface convention de nommage Golang

Je vais poster mon code:

/*
*  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
}

Il convient de noter que ServerSession est aussi une interface, en appelant "ServerSessioner" se sent juste déglingués pour moi.

Je suis jongle avec l'idée de la création d'une interface avec IsRole() et AssumeRole(), cependant, "de Roler" semble très motivé. C'est à l'aube sur moi que je ne sais pas vraiment ou avez jamais venir à travers des conventions de nommage pour les interfaces, autres que la norme "er" suffixe. Je ne me souviens VS C++ convention est de simplement jeter un "I" devant tout. Est-ce que "idiomatiques"?

Des suggestions?

  • Je viens de l'appeler RoleSupport mais atteindre pour l'anglais.SE serait intéressant efforce en effet. Veuillez envisager de ne pas utiliser this pour le nom de méthode de récepteurs: c'est mal vu comme étant unidiomatic Aller. Un exemple de discuter de ces questions.
  • Ouais, j'ai eu du mal avec un récepteur de noms. Je sais que l'aller idiome est d'utiliser une seule lettre de variables....Je suis désolé, je ne peux pas le faire. "ceci" ou "auto" sont répandus dans toute autre langue, il disambiguates sens. "RoleSupport" est ok, mais ne correspond vraiment pas un modèle net.
  • Pas une seule lettre, mais plutôt significatif abréviations -- avec une seule lettre étant OK pour un court fonctions vôtre (inclus). "Une autre langue" est une brute exaggregation pour vous. Eh bien, pour une raison quelconque, ce n'est pas un problème pour moi: les différentes langues, juste sentir différemment. Les programmeurs débutants en effet essayer dur d'être un truc de chiens d'essayer de réaliser leur ensemble de compétences acquises dans une autre langue qu'ils rencontrent (été moi-même bien sûr) mais c'est toujours mieux de comprendre la philosophie du langage et de s'y tenir.
  • Au moins cela permet de réduire le WTF facteur pour la prochaine programmeur de traiter avec votre code. 😉
  • WTF facteur, "ce" ou "auto" est "idiomatiques" dans au moins une demi-douzaine de langues, je "sais"
  • Ce n'est pas en Aller, voir: Dans le jeu de Go est de nommer le récepteur variable "self" trompeur ou de bonne pratique?
  • J'ai refait ce projet de ne pas inclure cette ou auto. play.golang.org/p/hGDELp3OBA c'est assez cool. Autant que je me souvienne, la première chose a poussé sur une pile dans un appel de fonction en C++ est une référence à "ce" suivi des paramètres de la fonction. "ce" peut être considéré comme un accord implicite premier paramètre, je suis heureux de voir ce qui se passe ici. Ce n'est pas, contrairement à python où ils ont juste enlevé la partie implicite. Je ne suis toujours pas entièrement convaincu, compte tenu de ce que je sais, mais je suis ignorant, donc je vais aller le long.

InformationsquelleAutor Dale | 2016-08-09