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 utiliserthis
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.
Vous devez vous connecter pour publier un commentaire.
Dans votre cas, je voudrais juste le nom de leur
RoleChecker
etRoleAssumer
, le "fusionné" unRoleCheckerAssumer
. Ou si vous voulez aller avec une seule interface, qui pourrait êtreRoleHelper
ouRoleChecker
.ServerSession
est aussi très bien, ou même justeSession
(surtout si il n'y a pas de "client" de la session).ServerSessioner
sur l'autre main est mauvaise,Session
n'est pas un verbe et non pas une méthode de l'interface.Il y a eu de nombreux posts sur les conventions.
Efficace Aller: les noms d'Interface:
Types d'Interface @ Ce qui est dans un nom? - Des conférences à golang.org
Pour le récepteur noms, ne pas utiliser de
this
ouself
ou similaires. Au lieu de cela:Les récepteurs @ Ce qui est dans un nom? - Des conférences à golang.org
Passer L'Examen Du Code Commentaires: Récepteur Noms:
this
etself
que la méthode récepteur: Dans le jeu de Go est de nommer le récepteur variable "self" trompeur ou de bonne pratique?Je l'ai eu, il s'avère que je peux utiliser le "er" de la convention.
Merci Sarathsp pour m'avoir fait penser à cela.
Dans golang Par convention, une méthode de l'interface noms sont
les noms désignant le faiseur d'une action. Par exemple,
Il serait préférable de faire les spécificités de la convention clair,peu importe ce qu'ils sont.Cela va bien quand il n'y a qu'une seule fonction ou un ensemble très spécifique de fonctions sont requises par l'interface
Il y a une pratique de l'aide
I
préfixe à un plus petit Dénominateur Commun des fonctions ,dans ce casIRole
serait un meilleur nom de l'interface l'interface définit deux fonctions qui doit être satiisfied par tous les types de représentantRole