接口命名惯例Golang

问题描述 投票:0回答:1
应该指出的是,Corversession也是一个界面,称“ Serversessioner”对我来说很奇怪。 我想在与Isrole()和asherole()界面创建界面的想法中,但是“ roler”似乎很奇怪。 除了标准的“ er”后缀之外,我真的不知道或曾经遇到过命名界面的命名惯例。 我似乎确实记得VS C ++的惯例就是在所有事物面前只扔一个“我”。 这是“惯用的”?

任何建议?

	

在您的情况下,我只会将它们命名为“合并”一个。或者,如果您使用一个接口,那可能是

RoleChecker

RoleAssumer

go interface naming-conventions naming
1个回答
55
投票
也很好,甚至只是

RoleHelper

(尤其是没有“客户端”会话)。 
RoleChecker
另一方面是不好的,
ServerSession
不是动词,也不是接口的方法。

有关会议的帖子很多。

有效的GO:接口名称:

通过惯例,一个方法名称加上-er后缀或类似的修改来构建代理名词:
Session
ServerSessioner
Session
Reader

等。
有许多这样的名字,尊敬它们及其捕获的功能名称的效率很高。

Writer

FormatterCloseNotifier

Read

Write
,等等,具有规范的签名和含义。为了避免混乱,除非具有相同的签名和含义,否则不要将您的方法之一提供给这些名称之一。相反,如果您的类型实现与知名类型的方法相同含义的方法,请给出相同的名称和签名;调用您的字符串连接器方法
Close
不。
接口类型 @名称中有什么? - 在golang.org

上谈话

仅指定一种方法的Interfaces通常只是将其函数名称附加到它上。

Flush
有时结果不是正确的英语,但是我们还是这样做:
String
有时我们使用英语来使其变得更好:
String
接口包含多种方法时,请选择一个准确描述其目的的名称(示例:net.conn,http.ResponseWriter,io.readwriter)。
对于接收器名称,请勿使用
ToString

type Reader interface { Read(p []byte) (n int, err error) }

或类似的名称。而是: receivers @名称是什么? - 在golang.org

上谈话
receivers是一种特殊的论点。

惯例,它们是反映接收器类型的一个或两个字符, 因为它们通常几乎出现在每一行上:

type Execer interface {
    Exec(query string, args []Value) (Result, error)
}
在类型的方法中应保持一致的receiver名称。 (不要在一种方法中使用r,而在另一种方法中使用RDR。)

Go代码评论评论:接收器名称:

  
方法接收器的名称应反映其身份;通常,其类型的一两个字母缩写就足够了(例如“客户”的“ C”或“ CL”)。不要使用诸如“ me”,“ this”或“ self”之类的通用名称,即面向对象的语言的标识符,这些语言更加强调与函数相反的方法。该名称不必像方法参数那样描述性,因为它的角色显而易见,并且没有纪录目的。它可能非常短,因为它几乎会出现在类型的每种方法的每一行上;熟悉承认简洁。也要保持一致:如果您以一种方法将接收器称为“ C”,请不要在另一个方法中称其为“ Cl”。

我明白了,事实证明我可以使用“ er”惯例。

type ByteReader interface { ReadByte() (c byte, err error) }

谢谢您让我正确地考虑这一点。
    

golang,按照惯例,一个方法接口名称为 名词表示动作的行动。例如:

this 无论是什么,最好将公约的具体细节清晰。当接口只需要一个功能或非常特定的功能时,这会很好。

有一种练习的做法,即使用
self

函数的最低共同点,在这种情况下,

func (b *Buffer) Read(p []byte) (n int, err error) func (sh serverHandler) ServeHTTP(rw ResponseWriter, req *Request) func (r Rectangle) Size() Point

将是一个更好的接口名称,因为该接口定义了两个函数,这些函数必须由代表

/* * 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 type RoleChecker interface { IsRole(Role, RolesHierarchy) bool } type RoleAssumer interface { AssumeRole(ServerSession, Role) } type RoleCheckerAssumer interface { RoleChecker RoleAssumer } 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 }
的所有类型都必须满足。 .

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.