Go es un lenguaje de programación de código abierto desarrollado en Google y diseñado para ayudar a construir sistemas de software simples y confiables. El punto fuerte de Go es sus mecanismos de concurrencia que hacen que sea más sencillo escribir software, explotar arquitecturas de múltiples núcleos..
Es un lenguaje compilado, tipificado estáticamente, concurrente y recolectado de basura..
Es un lenguaje moderno muy interesante debido a algunas de las elecciones que se han hecho durante su diseño. Por ejemplo, el Sistema de tipos, aunque Go tiene métodos y también un estilo de programación OO, no existe una jerarquía de tipos. La única forma de conseguirlo es a través de interfaces..
Se debe leer la especificación del idioma para comprender mejor los elementos de diseño del lenguaje. Es realmente conciso y ayuda a resaltar algunos detalles realmente interesantes. La forma en que Go difiere de otros lenguajes de programación típicos, es que tiene características a diferencia de otros lenguajes OO:
El código Go se mantiene bajo los espacios de trabajo. Es solo una jerarquía de directorios, como sigue:
src
- contiene archivos fuente de Go como paquetespkg
- contiene objetos de paquetecompartimiento
- contiene ejecutablesLa herramienta Ir crea los paquetes de origen e instala los binarios resultantes en compartimiento
y pkg
directorios.
Construyamos un sitio estático y luego continuemos para mejorarlo de modo que se comporte de forma mucho más dinámica, en función de la entrada del usuario..
La estructura de código para el sitio estático se ve así:
Por lo tanto, básicamente querrá crear una estructura similar a la imagen anterior o como se muestra en el repositorio. Esta estructura de repositorio residiría bajo el espacio de trabajo
. Lea sobre la estructura del código Go para más información.
Ahora lo que queremos hacer es servir un archivo HTML que reside en el directorio público.
los index.html
Los contenidos son los siguientes:
Sitio estático usando Go Desarrollar un sitio web usando Go
Soy una página estática, siendo servida con la ayuda de Go lang..
Y aquí está el programa Go para servir archivos estáticamente desde la carpeta pública:
paquete main import ("net / http") func main () fs: = http.FileServer (http.Dir ("public")) http.ListenAndServe (": 8080", fs)
Permítame explicarle:
Eso es. Realmente simple y al punto. Puede ejecutar el código utilizando lo siguiente: ve corre gostatic.go
.
Sin embargo, esta solución no separa claramente las preocupaciones de enrutamiento y servicio y, por lo tanto, una mejor solución sería la siguiente:
paquete main import ("net / http" "log") func main () fs: = http.FileServer (http.Dir ("public")) http.Handle ("/", fs) log.Println ("Listening ... ") err: = http.ListenAndServe (": 8080 ", nil) if err! = Nil log.Fatal (" ListenAndServe: ", err)
Escuchar y guardar
inicia un servidor HTTP en la dirección TCP dada y luego llama a Servir con un controlador. Este controlador suele ser nulo, por lo que el enrutador predeterminado (en el caso de Go, el DefaultServerMux puede hacerse cargo de).
Ahora en lo que respecta a DefaultServeMux - Tomemos un breve desvío para comprender cómo Go realiza el procesamiento HTTP. Lo hace con la ayuda de dos cosas primarias..
Continúe y ejecute la aplicación web de muestra como se hizo anteriormente y debería ver el resultado!
A continuación, escribamos la aplicación para que imprima la hora actual, lo que implica que en cada actualización obtendrá un resultado diferente. El código Go se vería así:
paquete main import ("fmt" "net / http" "time") func main () http.HandleFunc ("/", handler) log.Println ("listening ...") err: = http.ListenAndServe (": 8080 ", nil) if err! = nil panic (err) func handler (w http.ResponseWriter, r * http.Request) fmt.Fprintf (w," Hola. El tiempo es: "+ time.Now ( ) .Formato (tiempo.RFC850))
Aquí hemos importado. fmt
Para trabajar con algunas funciones de impresión. El fmt implementa funciones de E / S formateadas a lo largo de las líneas de C stdio
biblioteca.
También hemos hecho uso de HandleFunc
que registra la ruta URL con la función de controlador en el DefaultServeMux. El controlador de funciones es del tipo http.HandlerFunc
. Se necesita un http.ResponseWriter
y http.Request
como sus argumentos. Las personas familiarizadas con los servlets de Java recordarán haber hecho esto.!
Para imprimir el tiempo, importamos el "tiempo" del paquete estándar y lo usamos para responder al objeto del escritor de respuestas. Escribiendo a http.ResponseWriter
Objeto podemos enviar la respuesta al cliente..
http.Request
Es la estructura que representa la solicitud HTTP y, por lo tanto, tiene todos los datos de la solicitud. Para acceder a la ruta URL hacemos r.URL.path
.
Cuando ejecutas esto y luego accede localhost: 8080
Debería ver la hora actual en cada actualización.
Ahora vamos a escribir una aplicación que acepta una nombre de usuario
en la página de índice y luego, cuando se envía el formulario, saluda al usuario en la página siguiente.
Aquí está nuestra estructura de código Go:
Primero creamos un archivo HTML que contiene el formulario dentro del directorio público.
Go Greeter Go Greeter
Este formulario, al enviar, se redireccionará a /saludar
. Escribamos también los contenidos de la greet.html
archivo dentro del directorio público, que presentaríamos cuando la solicitud llega a /saludar
.
Go Greeter Hola .
El código Go es el siguiente:
paquete main import ("log" "net / http" "html / template") func main () http.HandleFunc ("/", root) http.HandleFunc ("/ greet", greeter) log.Println ("Listening ... ") err: = http.ListenAndServe (": 8080 ", nil) if err! = Nil log.Fatal (" ListenAndServe: ", err) func root (w http.ResponseWriter, r * http.Request) t, _: = template.ParseFiles ("public / index.html") t.Execute (w, nil) func greeter (w http.ResponseWriter, r * http.Request) username: = r.FormValue (" username ") t, _: = template.ParseFiles (" public / greeter.html ") err: = t.Execute (w, username) si err! = nil http.Error (w, err.Error (), http .StatusInternalServerError)
Hemos utilizado html / plantilla
para mantener el código HTML en las plantillas y luego usarlas para renderizar, a petición.
Hay una mirada curiosa. .
en el greeter.html
expediente. los html / plantilla
el paquete asume que el texto plano siempre se produce. Agrega escapes donde sea necesario para incrustar de forma segura esa cadena simple en el contexto correcto. Cuando un valor de datos no es texto sin formato, podemos asegurarnos de que no se escape especificando su tipo. Tan esencialmente, Oye, .!
puede ser invocado usando tmpl.Execute (out, HTML ('Nishant'))
para producir Oye, Nishant!
. Adelante, inténtalo!
Como la aplicación básica ahora está funcionando, finalmente podemos implementarla en Heroku.
Una vez que tengas la heroku-toolbelt correctamente configurados y el repositorio administrado a través de Git, podemos implementarlo en estas líneas.
El único cambio que deberíamos hacer en el código para implementarlo en Heroku es cambiar la línea en la que escucha en un puerto específico.
Cambio:
http.ListenAndServe (": 8080", ...)
a:
http.ListenAndServe (":" + os.Getenv ("PORT"), ...
.
Para poder implementarlo en Heroku, necesitará una cuenta de usuario de Heroku. También necesitarás un cliente de línea de comandos de Heroku. Consíguelo instalando el Heroku Toolbelt si no está ya.
Una vez instalado, inicie sesión usando la cuenta Heroku diciendo inicio de sesión de heroku
, y luego subir su clave SSH. Con estas cosas en su lugar, debería estar listo para desplegarse en Heroku.
Para poder implementarlo en Heroku, necesitamos que la aplicación se almacene en Git..
git init. git añadir -A. git commit -m 'primera aplicación heroku go'
También necesitaremos un Procfile para decirle a Heroku que el comando que necesita para ejecutar el proceso web es nuestra aplicación..
echo 'web: gogreeter'> Procfile
Las dependencias del paquete Go se gestionan en Heroku con la ayuda de Godep
paquetes.
Instala Godep y guarda tus dependencias usando lo siguiente:
ve y obtén github.com/kr/godep godep save
Agrega estos nuevos archivos a Git:
git añadir -A. git commit -m 'godep'
Finalmente, crea la aplicación Heroku. Se puede hacer así:
heroku create -b https://github.com/kr/heroku-buildpack-go.git
Esto debería crear un control remoto Git en su repositorio con el nombre de Heroku
. ¡Ya está listo para desplegar! Ejecuta lo siguiente:
git push heroku master
Una vez que se complete el comando anterior, su aplicación debería estar en funcionamiento!
Ve a visitar la URL diciendo Heroku abierto
o visitando directamente la URL de la aplicación que ves en la consola.
Eso es. Ahora tienes una aplicación Go en funcionamiento en Heroku!
En este tutorial aprendimos lo fácil que es desarrollar una aplicación web Go y también implementarla en Heroku. En estos días, el desarrollo web depende en gran medida de los marcos que uno utiliza. Para explorar algunas de estas opciones, definitivamente debería revisar algunos de estos proyectos.