Interface Naming Convention in Go
Problem:
The best practices for naming interfaces in Go, especially those that define a single method or a set of related methods.
Answer:
-
Single-Method Interfaces: For interfaces with a single method, the convention is to use a suffix like "-er" to create agent nouns. Examples include "Reader", "Writer", "Closer".
-
Multiple-Method Interfaces: When an interface has multiple methods, choose a descriptive name that reflects its intended purpose. Examples include "net.Conn", "http.ResponseWriter", "io.ReadWriter".
Detailed Explanation:
Single-Method Interfaces:
- The "-er" suffix helps establish a consistent naming pattern for one-method interfaces.
- This convention avoids confusion with function names that have similar meanings. For example, don't name an interface method "ToString" unless it has the same signature and functionality as the "String" method.
Multiple-Method Interfaces:
- When an interface includes multiple methods, the name should clearly describe its overall purpose.
- This ensures that developers can easily understand the functionality of the interface without having to read each method's documentation.
Receiver Names in Methods:
- Don't use generic receiver names like "this" or "self".
- Instead, use short, one or two-character names that reflect the receiver type. This helps improve code readability and consistency.
Additional Resources:
- [Effective Go: Interface names](https://go.dev/doc/effective_go#interface_names)
- [Interface Types @ What's in a name? - Talks at golang.org](https://talks.golang.org/2011/names.slide)
- [Receivers @ What's in a name? - Talks at golang.org](https://talks.golang.org/2011/names.slide#47)
- [Go Code Review Comments: Receiver Names](https://github.com/golang/go/wiki/CodeReviewComments#receiver-names)
The above is the detailed content of How do you name interfaces effectively in Go, especially when they define a single method or a set of related methods?. For more information, please follow other related articles on the PHP Chinese website!
Statement:The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn