Interfaces embebidas en Go
Una interfaz mayor se arma con otras menores, que es como lo hace io.
type Reader interface {
Read(p []byte) (int, error)
}
type Closer interface {
Close() error
}
type ReadCloser interface {
Reader
Closer
}
type memoryFile struct {
data []byte
offset int
}
func (m *memoryFile) Read(p []byte) (int, error) {
if m.offset >= len(m.data) {
return 0, io.EOF
}
n := copy(p, m.data[m.offset:])
m.offset += n
return n, nil
}
func (m *memoryFile) Close() error { return nil }
var _ ReadCloser = (*memoryFile)(nil)
Cómo funciona
- El embebido lista los conjuntos de métodos a combinar.
io.ReadWriteres exactamente Reader más Writer.- Aceptar la interfaz más chica que necesites es el hábito de Go.
Palabras clave y builtins usados aquí
bytecopyerrorfuncifintinterfacelenreturnstructtypevar
El intento, en números
- Líneas
- 30
- Caracteres a escribir
- 444
- Tokens
- 133
- Ritmo de tres estrellas
- 100 tpm
Al ritmo de tres estrellas de 100 tokens por minuto, este intento toma unos 80 segundos.
Paso 3 de 4 en Interfaces; paso 6 de 19 en Interfaces y genéricos.