我只是张贴我的代码:接口命名约定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++约定是在每件事物前面抛出一个“I”。这是“惯用”吗?
有什么建议吗?
我只是称之为'角色支持',但要达到英语水平。事实上,这将是一个有趣的尝试。请考虑不要使用'this'来命名方法接收器:这被认为是单向性的Go。讨论这些问题的[一个例子](http://stackoverflow.com/q/23482068/720999)。 – kostix
是的,我一直在努力接收机名称。我知道这个成语是使用单个字母变量....我很抱歉,我不能那样做。 “这个”或“自我”在任何其他语言中都非常普遍,它可以消除歧义。 “角色支持”是可以的,但并不适合整洁的模式。 – Dale
不是单个字母,而是有意义的缩写 - 单个字母可以用于短的功能(包括您的)。 “任何其他语言”肯定是一个严重的分解。那么,出于某种原因,这对我来说不是问题:不同的语言只是感觉不同。新手程序员的确努力成为一招狗,试图将他们的学习技能集成到他们面对的任何新语言中(一直在我自己身边),但理解语言背后的哲学并坚持下去总是更好。 – kostix