Cada módulo o clase debe tener una única responsabilidad o motivo para cambiar. En Go, esto se traduce en mantener las funciones y métodos enfocados en una tarea específica.
Ejemplo:
package main
import "fmt"
{ | |
"gopls.env": {"GOMODCACHE":"/home/{user}/go/pkg/mod"} | |
} |
package http | |
import ( | |
"context" | |
"log" | |
"net/http" | |
"time" | |
) | |
func JsonMiddleware(next http.Handler) http.Handler { |
Aunque Go no es un lenguaje de programación orientado a objetos (OOP) en el sentido tradicional (como Java o C++), proporciona formas idiomáticas de manejar conceptos comunes de OOP como encapsulación, herencia y polimorfismo. Esta es una guía básica para aplicar principios de OOP en Go de manera idiomática:
En Go, la encapsulación se logra utilizando la visibilidad basada en el caso de la primera letra. Los identificadores que comienzan con una letra mayúscula son exportados (públicos), mientras que los que comienzan con una letra minúscula son no exportados (privados).
Ejemplo:
package main
package expenses | |
import ( | |
"fmt" | |
) | |
// Record represents an expense record. | |
type Record struct { | |
Day int | |
Amount float64 |
package main | |
import ( | |
"fmt" | |
"os" | |
"path/filepath" | |
) | |
func main() { | |
path, _ := os.Getwd() |
(This is stale and you may wish to find a more up-to-date copy, but it is preserved here for posterity. Enjoy -- Daria 24 Nov 2017) | |
FROM alpine:latest | |
RUN apk add --no-cache git make musl-dev go | |
# Configure Go | |
ENV GOROOT /usr/lib/go | |
ENV GOPATH /go | |
ENV PATH /go/bin:$PATH | |
RUN mkdir -p ${GOPATH}/src ${GOPATH}/bin |
This is not an exhaustive list of all interfaces in Go's standard library.
I only list those I think are important.
Interfaces defined in frequently used packages (like io
, fmt
) are included.
Interfaces that have significant importance are also included.
All of the following information is based on go version go1.8.3 darwin/amd64
.