en Go, las interfaces son fundamentales para promover el polimorfismo y la abstracción. Actúan como contratos que especifican un conjunto de métodos que debe implementar un tipo, permitiendo que diferentes tipos sean tratados de manera uniforme y flexible.
Interfaces
En Go, una interfaz es un tipo que define un conjunto de métodos sin implementarlos. Especifica solo las firmas de los métodos que un tipo debe tener para satisfacer la interfaz. Esto permite que diferentes tipos se traten de manera uniforme siempre que implementen los métodos definidos por la interfaz. Las interfaces promueven el polimorfismo y la abstracción, facilitando la creación de código flexible y reutilizable.
IO.Writer
La interfaz IO.Writer es una de las más utilizadas en GO. Varios tipos implementan esta interfaz, incluidos OS.File, Bytes.Buffer y Net.Conn. Esto permite que los diferentes tipos de destinos de escritura sean tratados de manera uniforme y flexible.
// escritor es la interfaz que encapsula la operación de escritura básica.
Tipo de interfaz de escritor {
Escribir (p [] byte) (n int, error err)
}
// Writer é a interface que encapsula a operação básica de escrita.
type Writer interface {
Write(p []byte) (n int, err error)
}
N: Es el número de bytes escritos.
-
ERR: es un valor de tipo de error que indica si ocurren errores durante la escritura.
-
- Cualquier tipo que implementa el método de escritura con la suscripción correcta se considerará un Io.Writer.
¿Por qué el Writer io.Writer?
abstracción
: le permite tratar diferentes tipos de destinos de escritura de manera uniforme.
Flexibilidad
: facilita la creación de métodos genéricos que aceptan cualquier tipo que implementa la interfaz IO.Writer.
-
reutilización del código : usar io.writer se puede reutilizar con diferentes tipos de destinos, como archivos, sockets, bufffers, etc.
-
test : le permite crear simulacros y trozos para probar el código aislado.
-
Ejemplo
paquete principal
importar (
"FMT"
"tú"
"IO"
)
Func Main () {
var w io.writer = OS.StoutOut // w es del tipo io.writer
N, err: = w.write ([] byte ("¡Hola, mundo!"))))
si err!
fmt.println ("Error:", err)
}
fmt.printf ("\ bbytes escritos: %b", n)
}
- /tmp ➜ ir ejecutando ejemplo_io_writer.go
¡Hola Mundo!
Bytes Escritos: 1101
Conclusión
La interfaz IO.Writer es una de las interfaces más comunes en GO. Esto facilita la reutilización del código, la creación de métodos genéricos y la redacción de pruebas. Además, la interfaz IO.Writer promueve el polimorfismo, lo que permite que los diferentes tipos que implementan la interfaz se usan indistintamente. Se implementa ampliamente en varios paquetes de lenguaje GO estándar, como los bytes, netos, entre otros, demostrando su versatilidad e importancia en el ecosistema GO.
Referencias
package main
import (
"fmt"
"os"
"io"
)
func main() {
var w io.Writer = os.Stdout // w é do tipo io.Writer
n, err := w.Write([]byte("Hello, World!"))
if err != nil {
fmt.Println("Erro:", err)
}
fmt.Printf("\bBytes escritos: %b", n)
}
https://pkg.go.dev/
[email protected]#file.writal*
https://pkg.go.dev/log/slog/internal/buffer#buffer.write*&&]
https://pkg.go.dev/
[email protected]#conn*&&&]
/tmp ➜ go run example_io_writer.go
Hello, World!
Bytes escritos: 1101