¿Cuál es la ventaja de definir su aplicación como una estructura en Go?

¿Cuál es la ventaja de definir su aplicación como una estructura en Go?

Encapsulación de preocupaciones relacionadas.

El tutorial al que se vinculó básicamente usa dos cosas:

  • Un enrutador Gorilla Mux para manejar solicitudes REST
  • Una conexión de base de datos para recuperar y actualizar datos basados ​​en esas solicitudes REST

Lógicamente, los dos están íntimamente relacionados, por lo tanto, ponerlos en una sola estructura tiene mucho sentido y ayuda a evitar errores tontos como el uso de un enrutador configurado para manejar /products solicitudes de /products con una conexión DB a una base de datos de users .

Encapsular ambas cosas juntas en una estructura de App también le permite agregar métodos, que manipulan y controlan ambas cosas en cualquier estructura de App . Initialize() es un ejemplo de tal método.

Los programadores de C ++ reconocerían instantáneamente este estilo de codificación como programación basada en clases . El siguiente código en Ir:

escriba App struct {
Enrutador * mux.
DB * sql.DB
}

func (a * App) Inicializar (…) {

a.DB, err = sql.Open (“postgres”, …)

a.Router = mux.NewRouter ()

}

es casi exactamente equivalente a C ++ ‘s:

Aplicación de clase {
público:
mux :: Enrutador * Enrutador;
sql :: DB * DB;
nulo Inicializar (…);
}

Aplicación nula :: Inicializar (…) {

this-> DB = sql :: Open (“postgres”, …);

this-> Router = mux :: NewRouter ();

}


Se me ocurrió que podría haber estado confundido por el uso del tutorial del nombre App para la estructura de datos central de la aplicación. Llamar a una App struct no hace que el compilador Go lo trate de ninguna manera especial; su aplicación aún comienza a ejecutarse en la función main() del paquete main , por ejemplo.

Personalmente, habría llamado a esa estructura REST_Endpoint en REST_Endpoint lugar, para evitar la confusión de la que pareces haber sido presa.