Skip to content

Commit 618ed66

Browse files
author
ma0
committed
revision and correction of all chapter 3
1 parent 5995776 commit 618ed66

File tree

4 files changed

+34
-34
lines changed

4 files changed

+34
-34
lines changed

es/03.2.md

+8-8
Original file line numberDiff line numberDiff line change
@@ -36,25 +36,25 @@ Hablamos de que las aplicaciones web se basan en el protocolo HTTP, y Go permite
3636
```
3737
Después de ejecutar el código anterior, el host Local empieza a escuchar en el puerto 9090.
3838

39-
Abra su navegador y visite `http://localhost:9090`, se puede ver que `Hello astaxie` está en su pantalla .
39+
Abre tu navegador y visita `http://localhost:9090`, se puede ver que `Hello astaxie` está en su pantalla .
4040

41-
Vamos a intentar otra dirección con argumentos : `http://localhost:9090/?url_long=111&url_long=222`
41+
Vamos a intentar otra dirección con argumentos: `http://localhost:9090/?url_long=111&url_long=222`
4242

43-
Ahora veamos lo que sucedió en los dos lados de cliente y servidor .
43+
Ahora veamos lo que sucedió en los dos lados de cliente y servidor.
4444

45-
Usted debe ver la siguiente información en su lado del servidor :
45+
Usted debe ver la siguiente información en su lado del servidor:
4646

4747
![](images/3.2.goweb.png?raw=true)
4848

4949
Figura 3.8 Información del servidor por pantalla
5050

51-
Como se puede ver, sólo tenemos que llamar a dos funciones para crear un servidor web simple .
51+
Como se puede ver, sólo tenemos que llamar a dos funciones para crear un servidor web simple.
5252

53-
Si está trabajando con PHP, es probable que desee preguntar qué necesitamos algo como Nginx o Apache , la respuesta es que no necesitamos porque GO escucha el puerto TCP por sí mismo, y la `sayhelloName` función es la función lógica como controlador en PHP .
53+
Si has trabajado con PHP, es probable que te preguntes si necesitamos algo como Nginx o Apache, la respuesta es que no los necesitamos porque GO escucha el puerto TCP por sí mismo, y la función `sayhelloName` es la función lógica que funciona como controlador en PHP .
5454

55-
Si está trabajando con Python , usted debe saber tornado , y el ejemplo anterior es muy similar a eso.
55+
Si has trabajado con Python, debes estar familiarizado con tornado, y el ejemplo anterior es muy similar a tornado.
5656

57-
Si está trabajando con Ruby, usted puede notar que es como script/server en ROR .
57+
Si has trabajado con Ruby, usted puede notar que es como script/server en ROR.
5858

5959
Utilizamos dos funciones simples para configurar un servidor web simple en esta sección, y este servidor sencillo ya ha tenido capacidad para alta concurrencia. Vamos a hablar acerca de cómo usar esta característica en dos secciones siguientes .
6060

es/03.3.md

+10-10
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# 3.3 Como trabaja Go con la web
22

3-
Hemos aprendido a utilizar el paquete `net/http` para construir un sencillo servidor web en el apartado anterior, pero todos los principios de trabajo son las mismas que hemos hablado en la primera sección de este capítulo .
3+
Hemos aprendido a utilizar el paquete `net/http` para construir un sencillo servidor web en la sección anterior, pero todos los principios de trabajo son las mismas que hemos hablado en la primera sección de este capítulo .
44

55
## Algunos conceptos de los principios de trabajo web
66

@@ -18,19 +18,19 @@ La siguiente imagen muestra el flujo de trabajo del servidor web de Go.
1818

1919
![](images/3.3.http.png?raw=true)
2020

21-
Figura flujo de trabajo 3.9 http
21+
Figura 3.9 flujo de trabajo http
2222

23-
1. Crear socket y escucha en un puerto, esperando a los clientes .
24-
2. Acepta peticiones de los clientes .
25-
3. Tramitar las solicitudes, leer el encabezado HTTP, si se utiliza el método POST, también es necesario para leer los datos en el cuerpo del mensaje y signar a los controladores. Por último , devuelve datos de respuesta a los clientes.
23+
1. Crear socket, escuchar en un puerto y esperar a los clientes .
24+
2. Aceptar peticiones de los clientes .
25+
3. Tramitar las solicitudes, leer el encabezado HTTP, si se utiliza el método POST, también es necesario para leer los datos en el cuerpo del mensaje y enviarlos a los controladores. Por último, devolver los datos de respuesta a los clientes.
2626

27-
Una vez que conocemos las respuestas a lastres preguntas siguientes , es fácil saber cómo funciona la web en Go.
27+
Una vez que conocemos las respuestas a las preguntas siguientes , es fácil saber cómo funciona la web en Go.
2828

2929
- ¿Cómo escuchar un puerto?
3030
- ¿Cómo aceptar peticiones de cliente ?
3131
- ¿Cómo asignar controladores ?
3232

33-
En la sección anterior vimos que Go utiliza ListenAndServe para manejar estos problemas : inicializar un objeto de servidor , llame net.Listen ( " tcp" , addr ) para configurar un puerto TCP de escucha y escuchar a la dirección y el puerto específico.
33+
En la sección anterior vimos que Go utiliza ListenAndServe para manejar estas etapas: inicializar un objeto de servidor , llamar a net.Listen( "tcp" , addr ) para configurar un puerto TCP de escucha y escuchar a la dirección y el puerto específico.
3434

3535
Vamos a echar un vistazo a el código fuente del paquete `http`.
3636
```
@@ -66,17 +66,17 @@ Vamos a echar un vistazo a el código fuente del paquete `http`.
6666
}
6767
```
6868

69-
¿Cómo aceptar peticiones de cliente después de escuchar el puerto? En el código fuente , podemos ver que se llama `srv.Serve(net.Listener)` para manejar peticiones de clientes . En el cuerpo de la función hay un `for{}`, se acepta la solicitud, se crea una nueva conexión y, a continuación, se inicia un nuevo goroutine , y pasa los datos de solicitud a esta goroutine: `go c.serve()`. Así es como Go es compatible con alta concurrencia , y cada goroutine es independiente.
69+
¿Cómo aceptamos las peticiones de un cliente después que iniciamos a escuchar en un puerto? En el código fuente , podemos ver que se llama `srv.Serve(net.Listener)` para manejar peticiones de clientes. En el cuerpo de la función hay un `for{}`, se acepta la solicitud, se crea una nueva conexión y, a continuación, se inicia un nuevo goroutine , y pasa los datos de solicitud a esta goroutine: `go c.serve()`. Así es como Go es compatible con alta concurrencia, y cada goroutine es independiente.
7070

71-
Ahora, la forma de utilizar las funciones específicas para controlar las solicitudes? `conn` analiza la solicitud `c.ReadRequest()` al principio, y consegui el controlador correspondiente `handler : = c.server.Handler` que es el segundo argumento que pasábamos cuando llamamos `ListenAndServe`. Porque pasamos `nil`, por lo que Go usa su manejador controlador `handler = DefaultServeMux`. Entonces, ¿qué está haciendo `DefaultServeMux` aquí ? Bueno, esta es la variable de enrutador en este momento , se llama a las funciones de controlador de URL específicas . ¿Hemos fijar esto? Sí , lo hicimos. Recuerde que en la primera línea se utilizó `http.HandleFunc("/", sayhelloName)`. Es asi como se utiliza esta función para registrar el estado del router para la ruta "/". Cuando la dirección URL es `/` , el enrutador llama a la función `sayhelloName` . DefaultServeMux llama ServerHTTP para obtener la función de controlador de ruta diferente , y llama `sayhelloName` en este caso. Por último , el servidor escribe los datos y la respuesta a los clientes.
71+
¿Cómo usamos las funciones específicas para controlar las solicitudes? `conn` analiza la solicitud `c.ReadRequest()` al principio, y obtiene el controlador correspondiente `handler : = c.server.Handler` que es el segundo argumento que pasábamos cuando llamamos `ListenAndServe`. Como pasamos `nil`, Go usa su manejador por defecto `handler = DefaultServeMux`. Entonces, ¿qué está haciendo `DefaultServeMux` aquí? Bueno, esta es la variable de enrutador en este momento, se llama a las funciones de controlador de URL específicas . ¿Hemos asignado esto? Sí, lo hicimos. Recuerde que en la primera línea se utilizó `http.HandleFunc("/", sayhelloName)`. Es asi como se utiliza esta función para registrar el estado del router para la ruta "/". Cuando la dirección URL es `/`, el enrutador llama a la función `sayhelloName` . DefaultServeMux llama ServerHTTP para obtener la función de controlador de ruta diferente, y llama `sayhelloName` en este caso. Por último , el servidor escribe los datos y la respuesta a los clientes.
7272

7373
Flujo de trabajo detallado:
7474

7575
![](images/3.3.illustrator.png?raw=true)
7676

7777
Figura 3.10 Flujo de trabajo de manejar una petición HTTP
7878

79-
Creo que usted debe saber cómo Go se ejecuta servidores web ahora.
79+
Creo que ahora debes saber cómo Go se ejecuta servidores web ahora.
8080

8181
## Enlaces
8282

es/03.4.md

+15-15
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ En las secciones anteriores, hemos aprendido sobre el flujo de trabajo de la web
44

55
## goroutine en Conn
66

7-
A diferencia de los servidores HTTP normales , Go utiliza goroutine para toda conexion que creó Conn con el fin de lograr una alta concurrencia y rendimiento, por lo que cada caso es independiente.
7+
A diferencia de los servidores HTTP normales, Go utiliza goroutine para toda trabajo inicializado por Conn con el fin de lograr una alta concurrencia y rendimiento, por lo que cada trabajo es independiente.
88

99
Go usa el siguiente código para esperar a nuevas conexiones de clientes .
1010
```
@@ -14,11 +14,11 @@ Go usa el siguiente código para esperar a nuevas conexiones de clientes .
1414
}
1515
go c.serve()
1616
```
17-
Como puede ver, se crea una goroutine para cada conexión , y se pasa el controlador que es capaz de leer los datos de solicitud a la goroutine .
17+
Como puedes ver, se crea una goroutine para cada conexión , y se pasa el controlador que es capaz de leer los datos de solicitud a la goroutine.
1818

1919
## ServeMux personalizado
2020

21-
Utilizamos el enrutamiento por defecto en la sección anterior, cuando se habla conn.server , el router pasa los datos de solicitud como back-end al controlador.
21+
Utilizamos el enrutamiento por defecto en la sección anterior, cuando hablamos de conn.server, el router pasa los datos de solicitud como back-end al controlador.
2222

2323
El struct del router por defecto:
2424
```
@@ -40,7 +40,7 @@ La interfaz de Handler:
4040
ServeHTTP(ResponseWriter, *Request) // routing implementer
4141
}
4242
```
43-
`Handler` es una interfaz, pero la función `sayhelloName` no implementar su interfaz , por eso podríamos agregarlo como controlador ? Debido a que hay otro tipo `HandlerFunc` en el paquete `http` . Llamamos `HandlerFunc` definir nuestra `sayhelloName` , así `sayhelloName` implementa el `Handler` al mismo tiempo. que es como llamamos `HandlerFunc(f)`, y la función `f` es forzado convertido al tipo `HandlerFunc`.
43+
`Handler` es una interfaz, pero la función `sayhelloName` no implementa su interfaz, entonces ¿cómo podríamos agregarla como controlador? Debido a que hay otro tipo `HandlerFunc` en el paquete `http`. Nosotros llamamos `HandlerFunc` para definir nuestro método `sayhelloName` , así `sayhelloName` implementa el `Handler` al mismo tiempo. Es como si llamaramos `HandlerFunc(f)`, y la función `f` es forzado a convertirce al tipo `HandlerFunc`.
4444
```
4545
type HandlerFunc func(ResponseWriter, *Request)
4646
@@ -49,7 +49,7 @@ La interfaz de Handler:
4949
f(w, r)
5050
}
5151
```
52-
Cómo enrutador llama los controladores después de establecer reglas del router ?
52+
¿Cómo enrutador llama los controladores después de establecer reglas del router?
5353

5454
El enrutador llama `mux.handler.ServeHTTP(w , r)` cuando recibe solicitudes. En otras palabras, se llama la interfaz `ServeHTTP` de los controladores.
5555

@@ -70,9 +70,9 @@ Ahora, vamos a ver cómo funciona `mux.handler`.
7070
return h
7171
}
7272
```
73-
El router utiliza la URL como clave para encontrar correspondiente controlador que guarda en un mapa , y llama handler.ServeHTTP para ejecutar funciones para manejar los datos.
73+
El enrutador utiliza la URL como llave para encontrar el controlador correspondiente que guarda en un mapa, luego llama handler.ServeHTTP para ejecutar funciones y manejar los datos.
7474

75-
Usted debe entender el flujo de trabajo del router, y Go realmente apoya routers personalizados. El segundo argumento de ListenAndServe es para la configuración del router a medida, que es una interfaz de `Handler`. Por lo tanto , se puede utilizar cualquier router que implemente la interfaz `Handler`.
75+
En este punto, debes entender el flujo de trabajo del enrutador, y Go realmente apoya routers personalizados. El segundo argumento de ListenAndServe es para la configuración del enrutadores a la medida, entonces cualquier enrutador que implemente la interfaz de `Handler` puede ser utilizado.
7676

7777
El siguiente ejemplo muestra cómo implementar un enrutador sencillo.
7878
```
@@ -106,7 +106,7 @@ El siguiente ejemplo muestra cómo implementar un enrutador sencillo.
106106
```
107107
# Enrutamiento
108108

109-
Si tu no quieres usar un router, todavía puedes lograr lo que escribimos en la sección de arriba reemplazando el segundo argumento de `ListenAndServe` a nil, y registrando las URLS usando un `HandleFunc` función que recorre todas las URLs registradas para encontrar la mejor coincidencia, entonces debemos preocuparnos por el orden de registro.
109+
Si no quieres usar un enrutador, todavía puedes lograr lo que escribimos en la sección de arriba reemplazando el segundo argumento de `ListenAndServe` a nil, y registrando las URLS usando un `HandleFunc` función que recorre todas las URLs registradas para encontrar la mejor coincidencia, entonces debemos preocuparnos por el orden de registro.
110110

111111
código de ejemplo:
112112
```
@@ -131,7 +131,7 @@ código de ejemplo:
131131
}
132132
}
133133
```
134-
Esto está bien para aplicaciones simples las cuales no necesitan ruteos parametriados, pero ¿cuándo necesitas eso? Puedes usar las herramientas o frameworks, pero como este libro está enfocado en crear aplicaciones web en Go, vamos a enseñarte como manejar ese escenario también.
134+
Esto está bien para aplicaciones simples las cuales no necesitan ruteos parametrizados, pero ¿cuándo necesitas eso? Puedes usar las herramientas o frameworks, pero como este libro está enfocado en crear aplicaciones web en Go, vamos a enseñarte como manejar ese escenario también.
135135

136136
Cuando la concidencia es hecha, se llama a la función definida en `HandleFunc`, así que supongamos que estamos escribiendo un manejador para una lista y queremos eliminar una tarea, así que la aplicación decide que función se va a llamar cuando llegue la petición `/delete/1`, entonces registramos la URL de la siguiente manera:
137137
`http.HandleFunc("/delete/", views.DeleteTaskFunc)`
@@ -172,16 +172,16 @@ Cuando la concidencia es hecha, se llama a la función definida en `HandleFunc`,
172172
En escenarios mas complejos también podemos utilizar este método, la ventaja es que no vamos a tener que usar herramientas de terceros, pero las herramientas de terceros tienden a ser útiles en su sentido propio. Tienes que tomar la decisión de cuál método prefieres. Ninguna respuesta es la respuesta correcta.
173173

174174

175-
## GO flujo de ejecución del código
175+
## Flujo de ejecución del código en GO
176176

177177
Vamos a echar un vistazo a la lista de flujo de ejecución en conjunto.
178178

179179
- Se llama http.HandleFunc
180-
1. Llame HandleFunc de DefaultServeMux
181-
2. Llame Handle de DefaultServeMux
182-
3. Agregar reglas del router para mapear [cadena ] muxEntry de DefaultServeMux
183-
- Se llama http.ListenAndServe (": 9090 " , nil )
184-
1. se instancia el servidor
180+
1. Se Llama HandleFunc de DefaultServeMux
181+
2. Se Llama Handle de DefaultServeMux
182+
3. Se agregan las reglas del enrutamiento a map[string]muxEntry de DefaultServeMux
183+
- Se llama http.ListenAndServe (":9090" , nil )
184+
1. Se instancia el servidor
185185
2. Llama ListenAndServe del Servidor
186186
3. Llama net.Listen ( " tcp" , addr ) para escuchar en el puerto .
187187
4. Iniciar un bucle, y aceptar las solicitudes en el cuerpo del bucle.

es/03.5.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
En este capítulo, presentamos HTTP, el flujo de la resolución DNS y cómo construir un servidor Web simple. Entonces hablamos de cómo Go implementa servidor web para nosotros al ver el código fuente del paquete net/http.
44

5-
Espero que ahora conozca mucho más sobre el desarrollo web, y usted debería ver que es muy fácil y flexible crear una aplicación web en Go.
5+
Espero que ahora conozcas mucho más sobre el desarrollo web, y deberías ver que es muy fácil y flexible crear una aplicación web en Go.
66

77
## Enlaces
88

0 commit comments

Comments
 (0)