You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: es/03.2.md
+8-8
Original file line number
Diff line number
Diff line change
@@ -36,25 +36,25 @@ Hablamos de que las aplicaciones web se basan en el protocolo HTTP, y Go permite
36
36
```
37
37
Después de ejecutar el código anterior, el host Local empieza a escuchar en el puerto 9090.
38
38
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 .
40
40
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`
42
42
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.
44
44
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:
46
46
47
47

48
48
49
49
Figura 3.8 Información del servidor por pantalla
50
50
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.
52
52
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 .
54
54
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.
56
56
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.
58
58
59
59
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 .
Copy file name to clipboardExpand all lines: es/03.3.md
+10-10
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
# 3.3 Como trabaja Go con la web
2
2
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 .
4
4
5
5
## Algunos conceptos de los principios de trabajo web
6
6
@@ -18,19 +18,19 @@ La siguiente imagen muestra el flujo de trabajo del servidor web de Go.
18
18
19
19

20
20
21
-
Figura flujo de trabajo 3.9 http
21
+
Figura 3.9 flujo de trabajo http
22
22
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.
26
26
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.
28
28
29
29
- ¿Cómo escuchar un puerto?
30
30
- ¿Cómo aceptar peticiones de cliente ?
31
31
- ¿Cómo asignar controladores ?
32
32
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.
34
34
35
35
Vamos a echar un vistazo a el código fuente del paquete `http`.
36
36
```
@@ -66,17 +66,17 @@ Vamos a echar un vistazo a el código fuente del paquete `http`.
66
66
}
67
67
```
68
68
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.
70
70
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.
72
72
73
73
Flujo de trabajo detallado:
74
74
75
75

76
76
77
77
Figura 3.10 Flujo de trabajo de manejar una petición HTTP
78
78
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.
Copy file name to clipboardExpand all lines: es/03.4.md
+15-15
Original file line number
Diff line number
Diff line change
@@ -4,7 +4,7 @@ En las secciones anteriores, hemos aprendido sobre el flujo de trabajo de la web
4
4
5
5
## goroutine en Conn
6
6
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.
8
8
9
9
Go usa el siguiente código para esperar a nuevas conexiones de clientes .
10
10
```
@@ -14,11 +14,11 @@ Go usa el siguiente código para esperar a nuevas conexiones de clientes .
14
14
}
15
15
go c.serve()
16
16
```
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.
18
18
19
19
## ServeMux personalizado
20
20
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.
`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`.
44
44
```
45
45
type HandlerFunc func(ResponseWriter, *Request)
46
46
@@ -49,7 +49,7 @@ La interfaz de Handler:
49
49
f(w, r)
50
50
}
51
51
```
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?
53
53
54
54
El enrutador llama `mux.handler.ServeHTTP(w , r)` cuando recibe solicitudes. En otras palabras, se llama la interfaz `ServeHTTP` de los controladores.
55
55
@@ -70,9 +70,9 @@ Ahora, vamos a ver cómo funciona `mux.handler`.
70
70
return h
71
71
}
72
72
```
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.
74
74
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.
76
76
77
77
El siguiente ejemplo muestra cómo implementar un enrutador sencillo.
78
78
```
@@ -106,7 +106,7 @@ El siguiente ejemplo muestra cómo implementar un enrutador sencillo.
106
106
```
107
107
# Enrutamiento
108
108
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.
110
110
111
111
código de ejemplo:
112
112
```
@@ -131,7 +131,7 @@ código de ejemplo:
131
131
}
132
132
}
133
133
```
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.
135
135
136
136
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:
@@ -172,16 +172,16 @@ Cuando la concidencia es hecha, se llama a la función definida en `HandleFunc`,
172
172
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.
173
173
174
174
175
-
## GO flujo de ejecución del código
175
+
## Flujo de ejecución del código en GO
176
176
177
177
Vamos a echar un vistazo a la lista de flujo de ejecución en conjunto.
178
178
179
179
- 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
185
185
2. Llama ListenAndServe del Servidor
186
186
3. Llama net.Listen ( " tcp" , addr ) para escuchar en el puerto .
187
187
4. Iniciar un bucle, y aceptar las solicitudes en el cuerpo del bucle.
Copy file name to clipboardExpand all lines: es/03.5.md
+1-1
Original file line number
Diff line number
Diff line change
@@ -2,7 +2,7 @@
2
2
3
3
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.
4
4
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.
0 commit comments