我只是張貼我的代碼:接口命名約定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