diff --git a/README.md b/README.md index 78890c0..d68ef77 100644 --- a/README.md +++ b/README.md @@ -390,97 +390,96 @@ Feedback and suggestions are not only welcome but explicitly encouraged. `io.Reader` instead of `*os.File`. Tailor these to the needs of the specific function or method. Examples: - - **`io.Reader`** instead of `*os.File`: + - **`io.Reader`** instead of `*os.File`: - - `io.Reader` is a common interface for reading data, which can be - implemented by many types, including `*os.File`, `bytes.Buffer`, - `strings.Reader`, and network connections like `net.Conn`. + - `io.Reader` is a common interface for reading data, which can be + implemented by many types, including `*os.File`, `bytes.Buffer`, + `strings.Reader`, and network connections like `net.Conn`. - - **`io.Writer`** instead of `*os.File` or `*bytes.Buffer`: + - **`io.Writer`** instead of `*os.File` or `*bytes.Buffer`: - - `io.Writer` is used for writing data. It can be implemented by - `*os.File`, `bytes.Buffer`, `net.Conn`, and more. + - `io.Writer` is used for writing data. It can be implemented by + `*os.File`, `bytes.Buffer`, `net.Conn`, and more. - - **`io.ReadWriter`** instead of `*os.File`: + - **`io.ReadWriter`** instead of `*os.File`: - - `io.ReadWriter` combines `io.Reader` and `io.Writer`. It is often - used for types that can both read and write, such as `*os.File` - and `net.Conn`. + - `io.ReadWriter` combines `io.Reader` and `io.Writer`. It is often + used for types that can both read and write, such as `*os.File` + and `net.Conn`. - - **`io.Closer`** instead of `*os.File` or `*net.Conn`: + - **`io.Closer`** instead of `*os.File` or `*net.Conn`: - - `io.Closer` is used for types that need to be closed, including - `*os.File`, `net.Conn`, and other resources that require cleanup. + - `io.Closer` is used for types that need to be closed, including + `*os.File`, `net.Conn`, and other resources that require cleanup. - - **`io.ReadCloser`** instead of `*os.File` or `http.Response.Body`: + - **`io.ReadCloser`** instead of `*os.File` or `http.Response.Body`: - - `io.ReadCloser` combines `io.Reader` and `io.Closer`, and is - commonly used for types like `*os.File` and `http.Response.Body`. + - `io.ReadCloser` combines `io.Reader` and `io.Closer`, and is + commonly used for types like `*os.File` and `http.Response.Body`. - - **`io.WriteCloser`** instead of `*os.File` or `*gzip.Writer`: + - **`io.WriteCloser`** instead of `*os.File` or `*gzip.Writer`: - - `io.WriteCloser` combines `io.Writer` and `io.Closer`. It is used - for types like `*os.File` and `gzip.Writer`. + - `io.WriteCloser` combines `io.Writer` and `io.Closer`. It is used + for types like `*os.File` and `gzip.Writer`. - - **`io.ReadWriteCloser`** instead of `*os.File` or `*net.TCPConn`: + - **`io.ReadWriteCloser`** instead of `*os.File` or `*net.TCPConn`: - - `io.ReadWriteCloser` combines `io.Reader`, `io.Writer`, and - `io.Closer`. Examples include `*os.File` and `net.TCPConn`. + - `io.ReadWriteCloser` combines `io.Reader`, `io.Writer`, and + `io.Closer`. Examples include `*os.File` and `net.TCPConn`. - - **`fmt.Stringer`** instead of implementing a custom `String` method: + - **`fmt.Stringer`** instead of implementing a custom `String` method: - - `fmt.Stringer` is an interface for types that can convert - themselves to a string. Any type that implements the `String() + - `fmt.Stringer` is an interface for types that can convert + themselves to a string. Any type that implements the `String() + string` method satisfies this interface. - string` method satisfies this interface. + - **`error`** instead of custom error types: - - **`error`** instead of custom error types: + - The `error` interface is used for representing errors. Instead of + defining custom error types, you can use the `errors.New` + function or the `fmt.Errorf` function to create errors. - - The `error` interface is used for representing errors. Instead of - defining custom error types, you can use the `errors.New` - function or the `fmt.Errorf` function to create errors. + - **`net.Conn`** instead of `*net.TCPConn` or `*net.UDPConn`: - - **`net.Conn`** instead of `*net.TCPConn` or `*net.UDPConn`: + - `net.Conn` is a generic network connection interface that can be + implemented by TCP, UDP, and other types of network connections. - - `net.Conn` is a generic network connection interface that can be - implemented by TCP, UDP, and other types of network connections. + - **`http.Handler`** instead of custom HTTP handlers: - - **`http.Handler`** instead of custom HTTP handlers: + - `http.Handler` is an interface for handling HTTP requests. + Instead of creating custom handler types, you can use types that + implement the `ServeHTTP(http.ResponseWriter, *http.Request)` + method. - - `http.Handler` is an interface for handling HTTP requests. - Instead of creating custom handler types, you can use types that - implement the `ServeHTTP(http.ResponseWriter, *http.Request)` - method. + - **`http.HandlerFunc`** instead of creating a new type: - - **`http.HandlerFunc`** instead of creating a new type: + - `http.HandlerFunc` is a type that allows you to use functions as + HTTP handlers by implementing the `http.Handler` interface. - - `http.HandlerFunc` is a type that allows you to use functions as - HTTP handlers by implementing the `http.Handler` interface. + - **`encoding.BinaryMarshaler` and `encoding.BinaryUnmarshaler`** + instead of custom marshal/unmarshal methods: - - **`encoding.BinaryMarshaler` and `encoding.BinaryUnmarshaler`** - instead of custom marshal/unmarshal methods: + - These interfaces are used for binary serialization and + deserialization. Implementing these interfaces allows types to + be encoded and decoded in a standard way. - - These interfaces are used for binary serialization and - deserialization. Implementing these interfaces allows types to - be encoded and decoded in a standard way. + - **`encoding.TextMarshaler` and `encoding.TextUnmarshaler`** instead + of custom text marshal/unmarshal methods: - - **`encoding.TextMarshaler` and `encoding.TextUnmarshaler`** instead - of custom text marshal/unmarshal methods: + - These interfaces are used for text-based serialization and + deserialization. They are useful for types that need to be + represented as text. - - These interfaces are used for text-based serialization and - deserialization. They are useful for types that need to be - represented as text. + - **`sort.Interface`** instead of custom sorting logic: - - **`sort.Interface`** instead of custom sorting logic: + - `sort.Interface` is an interface for sorting collections. By + implementing the `Len`, `Less`, and `Swap` methods, you can sort + any collection using the `sort.Sort` function. - - `sort.Interface` is an interface for sorting collections. By - implementing the `Len`, `Less`, and `Swap` methods, you can sort - any collection using the `sort.Sort` function. - - - **`flag.Value`** instead of custom flag parsing: - - `flag.Value` is an interface for defining custom command-line - flags. Implementing the `String` and `Set` methods allows you to - use custom types with the `flag` package. + - **`flag.Value`** instead of custom flag parsing: + - `flag.Value` is an interface for defining custom command-line + flags. Implementing the `String` and `Set` methods allows you to + use custom types with the `flag` package. 1. Avoid using `panic` in library code. Instead, return errors to allow the caller to handle them. Reserve `panic` for truly exceptional