Methods
- Go does not have classes. However, you can define methods on struct types.
- The method receiverappears in its own argument list between the func keyword and the method name.
- You can declare a method on any type that is declared in your package, not just struct types.
- You cannot define a method on a type from another package (including built in types).
- Methods can be associated with a named type or a pointer to a named type.- There are two reasons to use a pointer receiver.
- Avoid copying the value on each method call (more efficient if the value type is a large struct)
- The method can modify the value that its receiver points to.
 
Interfaces
- An interface type is defined by a set of methods.
- A value of interface type can hold any value that implements those methods.
- One of the most ubiquitous interfaces is Stringerdefined by thefmtpackage.
- A Stringer is a type that can describe itself as a string.
| 1
2
3
 | type Stringer interface {
    String() string
}
 | 
Errors
- Go programs express error state with error values.
- The errortype is a built-in interface simliar tofmt.Stringer
| 1
2
3
 | type error interface {
    Error() string
}
 | 
- Functions often return an errorvalue, and calling code should handle errors by testing whether the error equalsnil.
| 1
2
3
4
5
 | i, err := strconv.Atoi("42")
if err != nil {
    fmt.Printf("couldn't convert number: %v\n", err)
}
fmt.Println("Converted integer:", i)
 | 
Readers
- The iopackage specifies theio.Readerinterface, which represents the read end of a stream of data.
| 1
 | func (T) Read(b []byte) (n int, err error)
 | 
Read populates the given byte slice with data and returns the number of bytes populated and an error value. It returns an io.EOF error when the stream ends.
Web servers
- Package httpserves HTTP requests using any value that implementshttp.Handler
| 1
2
3
4
5
 | package http
type Handler interface {
    ServeHTTP(w ResponseWriter, r *Request)
}
 |