diff --git a/LANGS.md b/LANGS.md index a665d0db..72deabfd 100644 --- a/LANGS.md +++ b/LANGS.md @@ -1,3 +1,4 @@ * [English](en/) +* [French](fr/) * [中文](zh/) -* [日本語](ja/) \ No newline at end of file +* [日本語](ja/) diff --git a/README.md b/README.md index be495017..82933c20 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # Multiple Language Versions * [English](en/) +* [French](fr/) +* [Spanish](es/) * [中文](zh/) * [日本語](ja/) diff --git a/book.json b/book.json new file mode 100644 index 00000000..a6316e03 --- /dev/null +++ b/book.json @@ -0,0 +1,39 @@ +{ + "output": null, + "generator": "site", + "title": "Build Web Application with golang", + "description": "Build Web Application with golang", + "extension": null, + "plugins": [], + "pluginsConfig": { + "fontSettings": { + "theme": "sepia", "night" or "white", + "family": "serif" or "sans", + "size": 1 to 4 + } + }, + "pdf": { + "toc": true, + "pageNumbers": true, + "fontSize": 18, + "paperSize": "a4", + "margin": { + "right": 36, + "left": 36, + "top": 36, + "bottom": 36 + } + } + "links": { + "home": "https://github.com/astaxie/build-web-application-with-golang", + "about": "https://github.com/astaxie/build-web-application-with-golang", + "issues": "https://github.com/astaxie/build-web-application-with-golang/issues", + "edit": null, + "sharing": { + "google": null, + "facebook": null, + "twitter": null, + "weibo": null + } + } +} \ No newline at end of file diff --git a/es/01.0.md b/es/01.0.md new file mode 100644 index 00000000..55479003 --- /dev/null +++ b/es/01.0.md @@ -0,0 +1,20 @@ +# 1 Configurando el entorno de Go + +Bienvenido al mundo de Go, empecemos a explorar! + +Go es un lenguaje de programación para sistemas concurrentes con garbage-collector y compilado-rápido. Tiene las siguientes ventajas: + +- Compila un gran proyecto en pocos segundos +- Proporciona un modelo de desarrollo de software con el que es fácil razonar, evitando la mayoría de problemas asociados con archivos de cabecera al estilo C. +- Es un lenguaje estático que no tiene niveles en su sistema de tipos, de esa forma sus usuarios no necesitan gastar tiempo lidiando con las relaciones entre los tipos. Es más parecido a un lenguaje orientado a objetos ligero. +- Realiza garbage collection. Provee soporte básico para comunicación y concurrencia. +- Diseñado para computadoras multi core. + +Go es un lenguaje compilado. Combina la eficiencia en desarrollo de lenguajes interpretados o dinámicos con la seguridad de lenguajes estáticos. Será el lenguaje de elección para computadoras modernas con múltiples core y red. Para este propósito, existen algunos problemas que necesitan ser resueltos al nivel del lenguaje elegido, cómo un sistema de tipo ligero y abundantemente expresivo, un modelo de concurrencia nativo, y un garbage collector estrictamente regulado. Por algún tiempo, no habían emergido paquetes o herramientas que apuntaran a resolver todos estos problemas de una forma pragmática; de esa forma surgió la motivación para el lenguaje Go. + +En este capítulo, te mostraremos cómo instalar y configurar tu propio ambiente de desarrollo en Go. + +## Links + +- [Directorio](preface.md) +- Sección siguiente: [Instalación](01.1.md) diff --git a/es/01.1.md b/es/01.1.md new file mode 100644 index 00000000..0e7ebe23 --- /dev/null +++ b/es/01.1.md @@ -0,0 +1,123 @@ +# 1.1 Instalación + +## Tres formas de instalar Go + +Existen muchas formas de configurar el entorno de desarrollo de Go en tu computadora, y puedes escoger la que más te guste. Las tres formas más comunes son las siguientes: + +- Paquetes oficiales de instalación + - El equipo de Go provee packetes de instalación convenientes para Windows, Linux, Mac y otros sistemas operativos. Este es probablemente el método más fácil para iniciar. +- Instalarlo desde el código fuente + - Es popular con los desarrolladores que están familiarizados con sistemas tipo Unix. +- Usando herramientas de terceros. + - Existen muchas herramientas de terceros y manejadores de paquetes para instalar Go, como apt-get en Ubuntu y Homebrew en la Mac. + +En el caso que desees instalar más de una versión de Go en la misma computadora, deberías revisar la herramienta llamada [GVM](https://github.com/moovweb/gvm). Es la mejor herramienta que he visto hasta el momento para cumplir esta tarea, de otra forma tendrás que lidiar con eso tu mismo. + +## Instalando desde el código fuente + +Debido a que algunas partes de Go están escritas en Plan 9 C y ensamblador AT&T, debes instalar un compilador de C antes de continuar. + +Si tienes una Mac y ya tienes instalado Xcode, entonces ya cuentas con el compilador. + +En sistemas tipo Unix, debes instalar gcc o un compilador similar. Por ejemplo, usando el manejador de paquetes apt-get (incluído con Ubuntu) puedes instalar los compiladores requeridos de la siguiente forma: + + `sudo apt-get install gcc libc6-dev` + +En Windows, debes instalar MinGW antes para poder instalar gcc. No olvides configurar tus variables de entorno después de que la instalación se ha completado. (Si estás utilizando una versión de Windows de 64 bits, entonces debes instalar la versión de 64 bits de MinGW) + +El equipo Go usa [Mercurial](http://mercurial.selenic.com/downloads/) para manejar su código fuente, por lo que debes instalar esta herramienta para poder bajar el código fuente de Go. + +En este punto ejecuta los siguientes comandos para clonar el código fuente de Go y compilarlo. (Clonará el código fuente en tú directorio actual. Cambia tu ruta actual antes de continuar. Esto puede tomar algún tiempo.) + + hg clone -u release https://code.google.com/p/go + cd go/src + ./all.bash + +Una instalación exitosa finalizará con el mensaje "ALL TESTS PASSED." + +En Windows puedes lograr lo mismo ejecutando `all.bat`. + +Si estas usando Windows el paquete de instalación establecerá tus variables de entorno automáticamente. En sistemas tipo Unix necesitas establecer estas variables de la siguiente manera. (Si tu versión de Go es mayor que 1.0 no debes establecer $GOBIN ya que estará relacionada automáticamente a tu $GOROOT/bin del que hablaremos en la sección siguiente) + + export GOROOT=$HOME/go + export GOBIN=$GOROOT/bin + export PATH=$PATH:$GOROOT/bin + +Si ves la siguiente información en tu pantalla, todo está listo. + +![](images/1.1.mac.png?raw=true) + +Imagen 1.1 Información después de instalar desde el código fuente + +Una vez que veas la información de uso de Go significa que has instalado exitosamente Go en tu computadora. Si dice "no such command", verifica que tu variable de entorno $PATH contiene la ruta de instalación de Go. + +## Usando los paquetes de instalación estándar + +Go tiene paquetes de instalación de un solo click para todo sistema operativo soportado. Estos paquetes instalarán Go en `/usr/local/go` (`c:\Go` en Windows) por defecto. Por supuesto esto puede ser modificado, pero también necesitas cambiar todas las variables de entorno manualmente a cómo mostramos anteriormente. + +### Cómo revisar si tu sistema operativo es de 32-bits ó 64-bits? + +Nuestro siguiente paso depende en el tipo de tu sistema operativo, así que debemos revisar esto antes de bajar los paquetes de instalación estándar. + +Si estás usando Windows, presiona `Win+R` y luego ejecuta la herramienta de comandos. Escribe el comando `systeminfo` y te mostrará información útil. Busca la línea que dice "system type" si ves "x64-based PC" eso significa que tu sistema operativo es de 64-bits, de otra forma es de 32-bits. + +Si eres un usuario de Mac recomiendo fuertemente que bajes el paquete de 64-bits, debido a que Go ya no soporta procesadores puros de 32-bits en Mac OSX. + +Los usuarios de Linux pueden escribir `uname -a` en la terminal para ver la información del sistema. + +Un sistema operativo de 64-bits mostrará lo siguiente: + + x86_64 x86_64 x86_64 GNU/Linux + // algunas versiones como Ubuntu 10.04 mostrarán de la siguiente forma + x86_64 GNU/Linux + +En cambio los sistemas operativos de 32-bits mostrarán: + + i686 i686 i386 GNU/Linux + +### Mac + +Ve a la [página de descarga](http://code.google.com/p/go/downloads/list), escoge `go1.0.3.darwin-386.pkg` para sistemas de 32-bits y `go1.0.3.darwin-amd64.pkg` para sistemas de 64-bits. Ve hasta el final presionando "next",`~/go/bin` será agregado al $PATH de tu sistema al finalizar la instalación. Ahora abre la terminal y escribe `go`. Debes ver el mismo resultado que se muestra en la imagen 1.1. + +### Linux + +Ve a la [página de descarga](http://code.google.com/p/go/downloads/list), escoge `go1.0.3.linux-386.tar.gz` para sistemas de 32-bits y `go1.0.3.linux-amd64.tar.gz` para sistemas de 64-bits. Supongamos que quieres instalar Go en la ruta `$GO_INSTALL_DIR`. Descomprime el archivo `tar.gz` a la ruta que escojas usando el comando `tar zxvf go1.0.3.linux-amd64.tar.gz -C $GO_INSTALL_DIR`. Luego configura tu $PATH con el siguiente comando: `export PATH=$PATH:$GO_INSTALL_DIR/go/bin`. Ahora abre la terminal y escribe `go`. Debes ver el mismo resultado que se muestra en la imagen 1.1. + +### Windows + +Ve a la [página de descarga](http://code.google.com/p/go/downloads/list), escoge `go1.0.3.windows-386.msi` para sistemas de 32-bits y `go1.0.3.windows-amd64.msi` para sistemas de 64-bits. Ve hasta el final presionando "next", `c:/go/bin` será agregado al `path`. Ahora abre la terminal y escribe `go`. Debes ver el mismo resultado que se muestra en la imagen 1.1. + +## Usando herramientas de terceros + +### GVM + +GVM es una herramienta de control de múltiples versiones de Go desarrollado por terceros, parecida a rvm para ruby. Es bien fácil de utilizar. Instala gvm escribiendo los siguientes comandos en tu terminal: + + bash < <(curl -s https://raw.github.com/moovweb/gvm/master/binscripts/gvm-installer) + +Luego instalamos Go usando los siguientes comandos: + + gvm install go1.0.3 + gvm use go1.0.3 + +Cuando el proceso ha finalizado estamos listos. + +### apt-get + +Ubuntu es la versión de escritorio más popular de Linux. Utiliza `apt-get` para manejar paquetes. Podemos instalar Go usando los siguientes comandos. + + sudo add-apt-repository ppa:gophers/go + sudo apt-get update + sudo apt-get install golang-stable + +### Homebrew + +Homebrew es una herramienta para manejar software comúnmente usada en la Mac. Simplemente escribe lo siguiente para instalar Go. + + brew install go + +## Links + +- [Directorio](preface.md) +- Sección anterior: [Configurando el entorno de Go](01.0.md) +- Sección siguiente: [$GOPATH y el ambiente de trabajo](01.2.md) diff --git a/es/01.2.md b/es/01.2.md new file mode 100644 index 00000000..a3995d36 --- /dev/null +++ b/es/01.2.md @@ -0,0 +1,151 @@ +#1.2 $GOPATH y el ambiente de trabajo + +## $GOPATH + +Todos los comandos de Go dependen de una importante variable de entorno llamada $GOPATH. Favor notar que esta no es la variable $GOROOT que es la que muestra dónde Go está instalado. Esta variable apunta al ambiente de trabajo de Go en tu computadora (You uso esta ruta en mi computadora; si no tienes la misma estructura de directorios, por favor reemplaza por la que tengas). + +En sistemas tipo Unix, la variable debe usar así: + + export GOPATH=/home/apple/mygo + +En Windows, necesitas crear una nueva variable de entorno llamada GOPATH, luego estable su valor a `c:\mygo` (Este valor depende dónde tu ambiente de trabajo esté ubicado) + +Está bien tener más de una ruta de ambiente de trabajo en $GOPATH, pero recuerda que debes usar `:`(`;` en Windows) para separarlos. En este punto, `go get` guardará el contenido de tu primera ruta en $GOPATH. + +En $GOPATH, debes tener los siguientes tres directorios: + +- `src` para archivos fuentes cuyo sufijo es .go, .c, .g, .s. +- `pkg` para archivos compilados cuyo sufijo es .a. +- `bin` para archivos ejecutables + +En este libro, utilizo `mygo` cómo mi única ruta en $GOPATH. + +## Directorio de paquetes + +Crea archivos de código fuente de paquetes de la siguiente forma `$GOPATH/src/mymath/sqrt.go` (`mymath` es el nombre del paquete) ( ***El autor utiliza `mymath` cómo su nombre de paquete, el mismo nombre para el directorio que contiene los archivos de código fuente del paquete) + +Cada vez que creas un paquete, deberías crear un nuevo folder en el directorio `src`. Los nombres de los directorios usualmente son los mismos que el paquete que vas a utilizar. Puedes tener directorios de múltiples niveles si lo deseas. Por ejemplo, si creas el directorio `$GOPATH/src/github.com/astaxie/beedb`, entonces la ruta del paquete sería `github.com/astaxie/beedb`. El nombre del paquete será el último directorio en tu ruta, que es `beedb` en este caso. + +Ejecuta los siguientes comandos. (Ahora el autor mostrará unos ejemplos) + + cd $GOPATH/src + mkdir mymath + +Crea un nuevo archivo llamado `sqrt.go`, escribe el siguiente contenido en el archivo. + + // Código fuente de $GOPATH/src/mymath/sqrt.go + package mymath + + func Sqrt(x float64) float64 { + z := 0.0 + for i := 0; i < 1000; i++ { + z -= (z*z - x) / (2 * x) + } + return z + } + +Ahora el directorio de mi paquete ha sido creado y su código ha sido escrito. Recomiendo que uses el mismo nombre para tus paquetes y sus directorios correspondientes y que los directorios contenga todo el código fuente del paquete. + +## Compilar paquetes + +Ya hemos creado nuestra paquete, pero cómo lo compilamos para propósitos prácticos? hay dos formas de hacer esto. + +1. Cambia tu ruta de trabajo al directorio de tu paquete, luego ejecuta el comando `go install`. +2. Ejecuta el comando de arriba, con la diferencia de que suministras el nombre del archivo como parámetro `go install mymath`. + +Después de compilar podemos abrir el siguiente directorio. + + cd $GOPATH/pkg/${GOOS}_${GOARCH} + // puedes ver que el archivo fue generado + mymath.a + +Este archivo cuyo sufijo es `.a`, es el archivo binario de nuestro paquete. Cómo lo usamos? + +Obviamente, necesitamos crear una nueva aplicación para utilizarlo. + +Crea una nueva aplicación llamada `mathapp`. + + cd $GOPATH/src + mkdir mathapp + cd mathapp + vim main.go + +código + + //$GOPATH/src/mathapp/main.go código fuente + package main + + import ( + "mymath" + "fmt" + ) + + func main() { + fmt.Printf("Hello, world. Sqrt(2) = %v\n", mymath.Sqrt(2)) + } + +Para compilar esta aplicación necesitas cambiar al directorio de la aplicación que en este caso es `$GOPATH/src/mathapp`, luego ejecuta el comando `go install`. Ahora deberías ver un archivo ejecutable llamado `mathapp` que se ha generado en el directorio `$GOPATH/bin/`. Para correr este programa usa el comando `./mathapp`. Deberías de ver el siguiente contenido en tu terminal: + + Hello world. Sqrt(2) = 1.414213562373095 + +## Instala paquete remotos + +Go tiene una herramienta para instalar paquetes remotos, es el comando llamado `go get`. Soporta la mayoría de comunidades de código libre, incluyendo Github, Google Code, BitBucket y Launchpad. + + go get github.com/astaxie/beedb + +Puedes usar `go get -u …` para actualizar tus paquetes remotos e incluso instalará todas sus dependencias. + +Esta herramienta usará diferente herramientas de control de versiones para las diferentes plataformas de código libre. Por ejemplo, `git` para Github y `hg` para Google Code. Debido a esto, debes instalar estas herramientas de control de versiones antes de usar `go get`. + +Después de ejecutar los comandos anteriormente descritos, la estructura de directorios debería verse de la siguiente forma: + + $GOPATH + src + |-github.com + |-astaxie + |-beedb + pkg + |--${GOOS}_${GOARCH} + |-github.com + |-astaxie + |-beedb.a + +Actualmente, `go get` clona el código fuente a la ruta $GOPATH/src, luego ejecuta `go install`. + +Puedes usar paquetes remotos de la misma forma que usas paquetes locales. + + import "github.com/astaxie/beedb" + +## Estructura completa del directorio + +Si has seguido todos los pasos anteriores, la estructura de tu directorio se debería ver de la siguiente forma. + + bin/ + mathapp + pkg/ + ${GOOS}_${GOARCH}, como darwin_amd64, linux_amd64 + mymath.a + github.com/ + astaxie/ + beedb.a + src/ + mathapp + main.go + mymath/ + sqrt.go + github.com/ + astaxie/ + beedb/ + beedb.go + util.go + +Ahora puedes ver la estructura de directorios claramente; `bin` contiene los archivos ejecutables, `pkg` contiene los archivos compliados y `src` los archivos de código fuente del paquete. + +(El formato de las variables de entorno en Windows es `%GOPATH%`, sin embargo este libro sigue principalmente el estilo Unix, así que si eres un usuario Windows debes reemplazarlo apropiadamente) + +## Links + +- [Directorio](preface.md) +- Sección anterior: [Instalación](01.1.md) +- Sección siguiente: [Comandos Go](01.3.md) diff --git a/es/01.3.md b/es/01.3.md new file mode 100644 index 00000000..80a74e05 --- /dev/null +++ b/es/01.3.md @@ -0,0 +1,104 @@ +#1.3 Comandos Go + +## Comandos Go + +El lenguaje Go viene con un conjunto completo de herramientas de comandos operacionales. Puedes ejecutar en la lína de comando `go` para verlas: + +![](images/1.3.go.png?raw=true) + +Imagen 1.3 El comando Go muestra información detallada. + +Todos estos nos son muy útiles, veamos cómo usar algunos de ellos. + +## go build + +Este comando es para pruebas de compilación. Compilará paquetes dependientes de ser necesario. + +- Si el paquete no es el paquete principal `main` como `mymath` en la sección 1.2, nada será generado después de ejecutar `go build`. Si necesitas el archivo de paquete `.a` en `$GOPATH/pkg`, mejor usa `go install`. +- Si el paquete es el paquete principal `main`, generará un archivo ejecutable en el mismo directorio. Si quieres que el archivo sea generado en `$GOPATH/bin`, usa `go install` o `go build -o ${PATH_HERE}/a.exe.` +- Si hay muchos archivos en el directorio, pero solamente deseas compilar uno de ellos, debes anexar el nombre del archivo después de `go build`. Por ejemplo, `go build a.go`. `go build` compilará todos los archivos en el directorio. +- También puedes asignar el nombre del archivo que será generado. Por ejemplo, en el proyecto `mathapp` (en la sección 1.2), usando `go build -o astaxie.exe` generará `astaxie.exe` en vez de `mathapp.exe`. El nombre por defecto es el nombre de tu directorio (en paquetes no principales non-main) o el primer nombre de archivo de código fuente (paquetes principales main). + +(De acuerdo a la [Especificación del Lenguaje de Programación Go](https://golang.org/ref/spec), los nombres de paquetes deben ser el nombre después de la palabra `package` en la primera línea de tus archivos de código fuente. No tiene que ser el mismo que el nombre del directorio y el nombre del archivo ejecutable será, por defecto, el del nombre de tu directorio) + +- `go build` ignora archivos cuyos nombres empiezan con `_` o `.`. +- Si deseas tener diferentes archivos fuentes para cada sistema operativo, puedes nombrar los archivos con el nombre del sistema operativo como sufijo. Supongamos que existen archivos fuentes para cargar arreglos. Pueden ser nombrados de la siguiente forma: + + array_linux.go | array_darwin.go | array_windows.go | array_freebsd.go + +`go build` escoge el que está asociado con tu sistema operativo. Por ejemplo, solamente compila array_linux.go en sistemas Linux e ignora todos los demás. + +## go clean + +Este comando es para limpiar los archivos que son generados por los compiladores, incluyendo los siguientes archivos: + + _obj/ // viejo directorio de object, dejado por Makefiles + _test/ // viejo directorio de test, dejado por Makefiles + _testmain.go // viejo directorio de gotest, dejado por Makefiles + test.out // viejo directorio de test, dejado por Makefiles + build.out // viejo directorio de test, dejado por Makefiles + *.[568ao] // object files, dejado por Makefiles + + DIR(.exe) // generado por go build + DIR.test(.exe) // generado por go test -c + MAINFILE(.exe) // generado por go build MAINFILE.go + +Usualmente utilizo este comando para limpiar mis archivos antes de subir mi proyecto a Github. Estas son herramientas útiles para pruebas locales, pero inútiles para el control de versiones. + +## go fmt + +La gente que trabaja con C/C++ deben saber que la gente siempre están argumentando qué estilo de código es mejor: estilo K&R o ANSI. Sin embargo, en Go, solamente hay un estilo de código que es forzado. Por ejemplo, llave izquierda solamente debe ser insertada al final de las líneas y no pueden estar en sus propias líneas, de otra forma tendrás errores de compilación! Afortunadamente, no debes recordar estas reglas `go fmt` hace este trabajo por ti. Solamente ejecuta el comando `go fmt .go` en la terminal. No uso mucho este comando, porque los IDEs usualmente ejecutan este comando automáticamente cuando guardas tu código fuente. Hablaré más respecto a los IDEs en la siguiente sección. + +Usualmente usamos `gofmt -w` en vez de `go fmt`. El último, no rescribirá tus archivos después de formatearlos, `gofmt -w src` formatea todo el proyecto. + +## go get + +Este comando es para obtener paquetes remotos. Hasta el momento soporta BitBucket, Github, Google Code y Launchpad. Actualmente existen dos cosas que suceden después de ejecutar este comando. La primera es que Go descarga el código fuente, luego ejecuta `go install`. Antes de que utilices este comando, asegúrate que tienes instaladas todas las herramientas relacionadas. + + BitBucket (Mercurial Git) + Github (git) + Google Code (Git, Mercurial, Subversion) + Launchpad (Bazaar) + +Para poder usar este comando, debes instalar estas herramientas correctamente. No olvides establecer `$PATH`. Por cierto, también soporta nombres de dominios customizados. Usa `go help remote` para más detalles al respecto. + +## go install + +Este comando compila todos los paquetes y genera archivos, luego los mueve a `$GOPATH/pkg` o `$GOPATH/bin`. + +## go test + +Este comando carga todos los archivos cuyos nombres incluyen `*_test.go` y genera archivos de pruebas, luego muestra información que se ve de la siguiente forma. + + ok archive/tar 0.011s + FAIL archive/zip 0.022s + ok compress/gzip 0.033s + ... + +Prueba todos tus archivos de prueba por defecto. Usa el comando `go help testflag` para más detalles. + +## go doc + +Muchas personas dicen que no necesitamos ninguna herramienta de documentación adicional para programar en Go (En realidad, ya he hecho un [CHM](https://github.com/astaxie/godoc)). Go tiene nativamente una herramienta de documentación poderosa. + +Así que, cómo buscamos información de paquetes en la documentación? Por ejemplo, si deseas encontrar más detalles del paquete `builtin`, usa el comando `go doc builtin`. Similarmente, usa el comando `go doc net/http` para buscar la documentación del paquete `http`. Si quieres ver más detalles de funciones específicas, usa los comandos `godoc fmt Printf` y `godoc -src fmt Printf` para ver el código fuente. + +Ejecuta el comando `godoc -http=:8080`, luego abre `127.0.0.1:8080` en tu navegador. Debes ver una versión localizada de golang.org. Puede no solamente mostrar la información de los paquetes estándar, sino también puede mostrar los paquetes en tu `$GOPATH/pkg`. Es grandiosa para aquellas personas que sufren del firewall en China. + +## Otros comandos + +Go provee comandos adicionales a los que ya mostramos. + + go fix // actualiza código de una vieja versión antes de go1 a una nueva versión después de go1 + go version // muestra información de tu versión de Go + go env // muestra las variables de entorno relacionadas a Go + go list // lista todos los paquetes instalados + go run // compila los archivos temporales y ejecuta la aplicación + +También hay más detalles de los comandos que hemos hablado, puedes usar el comando `go help ` para mostrarlos. + +## Links + +- [Directorio](preface.md) +- Sección anterior: [$GOPATH y el ambiente de trabajo](01.2.md) +- Sección siguiente: [Herramientas de Desarrollo para Go](01.4.md) diff --git a/es/01.4.md b/es/01.4.md new file mode 100644 index 00000000..b4f590b0 --- /dev/null +++ b/es/01.4.md @@ -0,0 +1,399 @@ +# Herramientas de Desarrollo para Go + +En esta sección les mostraré algunos IDEs que pueden ayudarte a volverte un programador más eficiente, con características cómo completamiento de código inteligente y auto formato. Todos son multi-plataforma, así que los pasos que mostraré no deberían de ser muy diferentes aún en el caso que no estés utilizando el mismo sistema operativo. + +## LiteIDE + +LiteIDE es un IDE de código libre, ligero para programar únicamente proyectos Go, es desarrollado por visualfc. + +![](images/1.4.liteide.png?raw=true) + +Imagen 1.4 Panel principal de LiteIDE + +Características de LiteIDE + +- Multi-platforma + - Windows + - Linux + - Mac OS +- Cross-compile + - Maneja múltiples ambientes de compilación + - Soporta la compilación para diferentes sistemas +- Manejo de Proyectos estándar + - Vista de documentación basada en $GOPATH + - Sistema de compilación basado en $GOPATH + - Indice de documentación del API basado en $GOPATH +- Editor de código fuente Go + - Delineado de código + - Soporte completo de gocode + - Indice del API y vista de la documentaciónd de Go + - Ver expresiones de código usando `F1` + - Saltar a la declaración de funciones usando `F2` + - Soporte Gdb + - Auto-formateo con `gofmt` +- Otras + - Multi-lenguaje + - Sistema de plugin + - Temas + - Soporte de sintaxis basado en Kate + - Completamiento inteligente basado en texto-completo + - Atajos configurables (shortcuts) + - Soporte de Markdown + - Previsualizar en tiempo real + - CSS personalizado + - Exportar HTML y PDF + - Convertir y unir a HTML y PDF + +### Instalación de LiteIDE + +- Instalar LiteIDE + - [Página de descarga](http://code.google.com/p/golangide) + - [Código Fuente](https://github.com/visualfc/liteide) + + Primeramente debes instalar Go, luego descarga la versión apropiada para tu sistema operativo. Descomprime el paquete para poder usarlo directamente. +- Instala gocode + + Debes instalar gocode para poder usar el completamiento inteligente + + go get -u github.com/nsf/gocode + +- Entorno de compilación + + Cambia la configuración en LiteIDE para que se ajuste a tu sistema operativo. + En Windows y usando al versión de 64-bits de Go, debes usar win64 cómo la configuración de entorno en la barra de herramientas. Luego escoge `opinion`, busca `LiteEnv` en la lista de la izquierda y abre el archivo `win64.env` en la lista de la derecha. + + GOROOT=c:\go + GOBIN= + GOARCH=amd64 + GOOS=windows + CGO_ENABLED=1 + + PATH=%GOBIN%;%GOROOT%\bin;%PATH% + 。。。 + + Reemplaza `GOROOT=c:\go` con tu ruta de instalación de Go y guarda. Si tienes MinGW64, agrega `c:\MinGW64\bin` a la variable de entorno de tu path para soportar `cgo`. + + En Linux y usando la versiónd de 64-bits de Go, debes escoger linux64 como la configuración de entorno en la barra de herramientas. Luego escoge `opinion`, busca `LiteEnv` en la lista de la izquierda y abre el archivo `linux64.env` en la lista de la derecha. + + GOROOT=$HOME/go + GOBIN= + GOARCH=amd64 + GOOS=linux + CGO_ENABLED=1 + + PATH=$GOBIN:$GOROOT/bin:$PATH + 。。。 + + Reemplaza `GOROOT=$HOME/go` con tu ruta de instalación de Go y guarda. +- $GOPATH + $GOPATH es la ruta que contiene la lista de proyectos. Abre la herramienta de comandos (o presiona `Ctrl+` en LiteIDE), luego escribe `go help gopath` para más detalles. + Es bien fácil ver y cambiar $GOPATH en LiteIDE. + +## Sublime Text + +Ahora voy a introducir Sublime Text 2 (o simplemente Sublime) + GoSublime + gocode + MarGo. Déjenme explicar el porqué. + +- Completamiento inteligente + + ![](images/1.4.sublime1.png?raw=true) + + Imagen 1.5 Completamiento inteligente con Sublime +- Auto-formateo de los archivos de código +- Manejo de proyectos + + ![](images/1.4.sublime2.png?raw=true) + + Imagen 1.6 Manjo de proyectos con Sublime + +- Realce de sintaxis +- Prueba gratis eterna sin limitaciones funcionales. Te recuerda de vez en cuando la compra de una licencia, pero simplemente puedes ignorarla si lo deseas. Por supuesto, si encuentras que realmente mejora tu productividad y realmente disfrutas usarlo, compra una copia y apoya el desarrollo de nuevas versiones! + +Primero, descarga la versión de [Sublime](http://www.sublimetext.com/) adecuada para tu sistema operativo. + +1. Presiona `Ctrl+`, abre la herramienta de comandos e ingresa los siguientes comandos + + import urllib2,os; pf='Package Control.sublime-package'; ipp=sublime.installed_packages_path(); os.makedirs(ipp) if not os.path.exists(ipp) else None; urllib2.install_opener(urllib2.build_opener(urllib2.ProxyHandler())); open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read()); print 'Please restart Sublime Text to finish installation' + + Reinicia Sublime Text cuando la instalación ha finalizado. Luego busca la opción de `Package Control` en el menú de "Preferences". + + ![](images/1.4.sublime3.png?raw=true) + + Imagen 1.7 Sublime Package Control +2. Para instalar GoSublime, SidebarEnhancements y Go Build, presiona `Ctrl+Shift+p` para abrir Package Control, luego escribe `pcip` (atajo para "Package Control: Install Package"). + + ![](images/1.4.sublime4.png?raw=true) + + Imagen 1.8 Sublime Install Packages + + Ahora escribe "GoSublime", presiona OK para instalar el paquete y repite los mismos pasos para instalar SidebarEnhancements y Go Build. Una vez más reinicia el editor cuando se complete la instalación. +3. Para verificar que la instalación fue exitosa, abre Sublime, luego abre el achivo `main.go` para ver si tiene el realce de sintaxis adecuado, escribe `import` para ver si el completamiento de código se muestra. Luego de escribir `import "fmt"`, escribe `fmt.` en cualquier parte luego de la declaración `import` para ver si el completamiento inteligente de funciones está funcionando. + + Si todo está bien, estamos listos. + + Si no, revisa tu $PATH nuevamente. Abre la terminal, escribe `gocode`. Si no se ejecuta, tu $PATH no fue configurado correctamente. + +## Vim + +Vim es un editor de texto popular para los programadores, que evolucionó de su predecesor más ligero, Vi. Tiene funciones para completamiento inteligente, compilació y saltar a los errores. + +![](images/1.4.vim.png?raw=true) + +Imagen 1.8 Completamiento inteligente en Vim para Go + +1. Realce de sintaxis para Go + + cp -r $GOROOT/misc/vim/* ~/.vim/ + +2. Habilitando el realce de sintaxis + + filetype plugin indent on + syntax on + +3. Instalar [gocode](https://github.com/nsf/gocode/) + + go get -u github.com/nsf/gocode + + gocode se instalará por defecto en `$GOBIN` + +4. Configura [gocode](https://github.com/nsf/gocode/) + + ~ cd $GOPATH/src/github.com/nsf/gocode/vim + ~ ./update.bash + ~ gocode set propose-builtins true + propose-builtins true + ~ gocode set lib-path "/home/border/gocode/pkg/linux_amd64" + lib-path "/home/border/gocode/pkg/linux_amd64" + ~ gocode set + propose-builtins true + lib-path "/home/border/gocode/pkg/linux_amd64" + + Explicación de la configuración de gocode: + + propose-builtins: especifica si abrir o no el completamiento inteligente; falso por defecto. + lib-path: gocode solamente busca paquetes en `$GOPATH/pkg/$GOOS_$GOARCH` y `$GOROOT/pkg/$GOOS_$GOARCH`. Esta configuración puede usarse para agregar rutas adicionales. + +5. Felicitaciones! Prueba `:e main.go` para experimentar el mundo de Go! + +## Emacs + +Emcas es la llamada arma de Dios. No es solamente un editor, sino un poderoso IDE. + +![](images/1.4.emacs.png?raw=true) + +Imagen 1.10 Panel principal de Emacs editando Go + +1. Realce de sintaxis + + cp $GOROOT/misc/emacs/* ~/.emacs.d/ + +2. Instalar [gocode](https://github.com/nsf/gocode/) + + go get -u github.com/nsf/gocode + + gocode se instalará por defecto en `$GOBIN` +3. Configura [gocode](https://github.com/nsf/gocode/) + + ~ cd $GOPATH/src/github.com/nsf/gocode/vim + ~ ./update.bash + ~ gocode set propose-builtins true + propose-builtins true + ~ gocode set lib-path "/home/border/gocode/pkg/linux_amd64" + lib-path "/home/border/gocode/pkg/linux_amd64" + ~ gocode set + propose-builtins true + lib-path "/home/border/gocode/pkg/linux_amd64" + +4. Instalar [Auto Completion](http://www.emacswiki.org/emacs/AutoComplete) + Descarga y descomprime + + ~ make install DIR=$HOME/.emacs.d/auto-complete + + Configura el archivo ~/.emacs + + ;;auto-complete + (require 'auto-complete-config) + (add-to-list 'ac-dictionary-directories "~/.emacs.d/auto-complete/ac-dict") + (ac-config-default) + (local-set-key (kbd "M-/") 'semantic-complete-analyze-inline) + (local-set-key "." 'semantic-complete-self-insert) + (local-set-key ">" 'semantic-complete-self-insert) + + Visita este [link](http://www.emacswiki.org/emacs/AutoComplete) para más detalles. +5. Configura .emacs + + ;; golang mode + (require 'go-mode-load) + (require 'go-autocomplete) + ;; speedbar + ;; (speedbar 1) + (speedbar-add-supported-extension ".go") + (add-hook + 'go-mode-hook + '(lambda () + ;; gocode + (auto-complete-mode 1) + (setq ac-sources '(ac-source-go)) + ;; Imenu & Speedbar + (setq imenu-generic-expression + '(("type" "^type *\\([^ \t\n\r\f]*\\)" 1) + ("func" "^func *\\(.*\\) {" 1))) + (imenu-add-to-menubar "Index") + ;; Outline mode + (make-local-variable 'outline-regexp) + (setq outline-regexp "//\\.\\|//[^\r\n\f][^\r\n\f]\\|pack\\|func\\|impo\\|cons\\|var.\\|type\\|\t\t*....") + (outline-minor-mode 1) + (local-set-key "\M-a" 'outline-previous-visible-heading) + (local-set-key "\M-e" 'outline-next-visible-heading) + ;; Menu bar + (require 'easymenu) + (defconst go-hooked-menu + '("Go tools" + ["Go run buffer" go t] + ["Go reformat buffer" go-fmt-buffer t] + ["Go check buffer" go-fix-buffer t])) + (easy-menu-define + go-added-menu + (current-local-map) + "Go tools" + go-hooked-menu) + + ;; Other + (setq show-trailing-whitespace t) + )) + ;; helper function + (defun go () + "run current buffer" + (interactive) + (compile (concat "go run " (buffer-file-name)))) + + ;; helper function + (defun go-fmt-buffer () + "run gofmt on current buffer" + (interactive) + (if buffer-read-only + (progn + (ding) + (message "Buffer is read only")) + (let ((p (line-number-at-pos)) + (filename (buffer-file-name)) + (old-max-mini-window-height max-mini-window-height)) + (show-all) + (if (get-buffer "*Go Reformat Errors*") + (progn + (delete-windows-on "*Go Reformat Errors*") + (kill-buffer "*Go Reformat Errors*"))) + (setq max-mini-window-height 1) + (if (= 0 (shell-command-on-region (point-min) (point-max) "gofmt" "*Go Reformat Output*" nil "*Go Reformat Errors*" t)) + (progn + (erase-buffer) + (insert-buffer-substring "*Go Reformat Output*") + (goto-char (point-min)) + (forward-line (1- p))) + (with-current-buffer "*Go Reformat Errors*" + (progn + (goto-char (point-min)) + (while (re-search-forward "" nil t) + (replace-match filename)) + (goto-char (point-min)) + (compilation-mode)))) + (setq max-mini-window-height old-max-mini-window-height) + (delete-windows-on "*Go Reformat Output*") + (kill-buffer "*Go Reformat Output*")))) + ;; helper function + (defun go-fix-buffer () + "run gofix on current buffer" + (interactive) + (show-all) + (shell-command-on-region (point-min) (point-max) "go tool fix -diff")) +6. Felicitaciones, ya estás listo! Speedbar está cerrada por defecto -remueve los símbolos de comentarios en la línea `;;(speedbar 1)` para habilitar esta característica o puedes usarla a través de `M-x speedbar`. + +## Eclipse + +Eclipse también es una grandiosa herramienta de desarrollo. Te mostraré como usarla para escribir programas en Go. + +![](images/1.4.eclipse1.png?raw=true) + +Imagen 1.1 Panel principal de Eclipse editando Go + +1. Descarga e instala[Eclipse](http://www.eclipse.org/) +2. Descarga [goclipse](https://code.google.com/p/goclipse/) + [http://code.google.com/p/goclipse/wiki/InstallationInstructions](http://code.google.com/p/goclipse/wiki/InstallationInstructions) +3. Descarga gocode + + gocode in Github. + + https://github.com/nsf/gocode + + Necesitas instalar git en Windows, usualmente usamos [msysgit](https://code.google.com/p/msysgit/) + + Instala gocode en la herramienta de comandos + + go get -u github.com/nsf/gocode + + También puedes instalar desde el código fuente si gustas. +4. Descarga e instala [MinGW](http://sourceforge.net/projects/mingw/files/MinGW/) +5. Configura los plugins. + + Windows->Preferences->Go + + (1).Configura el compilador Go + + ![](images/1.4.eclipse2.png?raw=true) + + Imagen 1.12 Configuración de Go en Eclipse + + (2).Configura gocode(opcional), estable la ruta de gocode a dónde se encuentra el archivo gocode.exe + + ![](images/1.4.eclipse3.png?raw=true) + + Imagen 1.13 Configuración gocode + + (3).Configura gdb(opcional), establece la ruta gdb a dónde se encuentra el archivo gdb.exe + + ![](images/1.4.eclipse4.png?raw=true) + + Imagen 1.14 Configuración gdb +6. Verifica la instalación + + Crea un nuevo proyecto Go y un archivo hello.go + + ![](images/1.4.eclipse5.png?raw=true) + + Imagen 1.15 Crea un nuevo proyecto Go y un archivo + + Prueba la instalación a cómo sigue (necesitas escribir el comando en la consola en Eclipse) + + ![](images/1.4.eclipse6.png?raw=true) + + Imagen 1.16 Prueba el programa Go en Eclipse + +## IntelliJ IDEA + +Las personas que han trabajado con Java deben estar familiarizadas con este IDE. Soporta el realce de sintaxis y completamiento de código inteligente, implementado por un plugin. + +1. Descarga IDEA, no hay diferencia entre la edición Ultimate y Community + + ![](images/1.4.idea1.png?raw=true) + +2. Instala el plugin Go. Escoge `File - Setting - Plugins`, luego da click en `Browser repo`. + + ![](images/1.4.idea3.png?raw=true) + +3. Busca `golang`, doble click `download and install` y espera que la descarga se complete. + + ![](images/1.4.idea4.png?raw=true) + + Click `Apply`, luego reinicia. +4. Ahora puedes crear un proyecto Go. + + ![](images/1.4.idea5.png?raw=true) + + Introduce la ubicación de tu Go sdk en el siguiente paso - básicamente es tu $GOROOT. + +( ***Revisa este [artíclo de blog](http://wuwen.org/tips-about-using-intellij-idea-and-go/) para una configuración paso a paso *** ) + +## Links + +- [Directorio](preface.md) +- Sección anterior: [Comandos Go](01.3.md) +- Sección siguiente: [Resumen](01.5.md) diff --git a/es/01.5.md b/es/01.5.md new file mode 100644 index 00000000..bfeab561 --- /dev/null +++ b/es/01.5.md @@ -0,0 +1,9 @@ +# 1.5 Resumen + +En este capítulo hablamos acerca de como instalar Go usando tres métodos diferentes, incluyendo desde el código fuente, paquetes estándares y herramientas de terceros. Luego mostramos como configurar el ambiente de desarrollo de Go, principalmente cubriendo como configurar tu `$GOPATH`. Luego de eso se introdujeron algunos pasos para compilar y desplegar los programos Go. Luego cubrimos los comandos Go, incluyendo los comandos para compilar, instalar, formatear y probar. Finalmente existen muchas herramientas poderosas para desarrollar programas Go como LiteIDE, Sublime Text, Vim, Emacs, Eclipse, IntelliJ IDEA, etc. Puedes escoger cualquier y explorar el mundo de Go. + +## Links + +- [Directorio](preface.md) +- Sección anterior: [Herramientas de Desarrollo para Go](01.4.md) +- Siguiente capítulo: [Conocimiento básico de Go](02.0.md) diff --git a/es/README.md b/es/README.md new file mode 100644 index 00000000..c477d6a1 --- /dev/null +++ b/es/README.md @@ -0,0 +1,37 @@ +***Construye Aplicaciones Web con Golang*** +====================================== + +### Propósito + +Debido a que estoy interesado en el desarrollo de aplicaciones web, usé mi tiempo libre para escribir este libro en versión código libre. No significa que tengo muy buenas habilidades para construir aplicaciones web; Me gustaría compartir lo que he hecho con Go construyendo aplicaciones web. + +- Para aquellos que están trabajando con PHP/Python/Ruby, aprenderán cómo construir una aplicación web con Go. +- Para aquellos que están trabajando con C/C++, conocerán cómo funciona la web. + +Creo que el próposito de estudiar es compartir con otros. La cosa más feliz en mi vida es compartir todo lo que sé con más personas. + +# Donaciones + +AliPay: alipay + +Donar (Sitio en inglés):[donar](http://beego.me/donate) + +## Comunidad +QQ群:386056972 + +BBS:[http://golanghome.com/](http://golanghome.com/) + +### Reconocimientos + + - [四月份平民 April Citizen](https://plus.google.com/110445767383269817959) (revisó código) + - [洪瑞琦 Hong Ruiqi](https://github.com/hongruiqi) (revisó código) + - [边 疆 BianJiang](https://github.com/border) (escribió las configuraciones acerca de Vim y Emacs para el desarrollo con Go) + - [欧林猫 Oling Cat](https://github.com/OlingCat)(revisó código) + - [吴文磊 Wenlei Wu](mailto:spadesacn@gmail.com)(aportó algunas imágenes) + - [北极星 Polaris](https://github.com/polaris1119)(revisó todo el libro) + - [雨 痕 Rain Trail](https://github.com/qyuhen)(revisó el capítulo 2 y 3) + +### Licencia + +Este libro está licenciado bajo la [Licencia CC BY-SA 3.0](http://creativecommons.org/licenses/by-sa/3.0/), +el código está licenciado bajo una [Licencia BSD 3-Clause](), a menos que se especifique de otra forma. diff --git a/es/code/readme.md b/es/code/readme.md new file mode 100644 index 00000000..f8f759cc --- /dev/null +++ b/es/code/readme.md @@ -0,0 +1,6 @@ +## Configuracíon del ambiente de trabajo. + +Para evitar problemas con el ambiente de trabajo y ser capaces de desarrollar desde cualquier ruta, establece la variable de entorno `GOPATH` a la ruta de este directorio. + +Más información: +- [Documentación GOPATH](http://golang.org/doc/code.html#GOPATH) diff --git a/es/code/src/apps/ch.1.2/main.go b/es/code/src/apps/ch.1.2/main.go new file mode 100644 index 00000000..d2e7c62b --- /dev/null +++ b/es/code/src/apps/ch.1.2/main.go @@ -0,0 +1,14 @@ +// Código de ejemplo para el capítulo 1.2 del libro "Construye Aplicaciones Web con Golang" +// Propósito: Ejecuta este archivo para verificar que tu espacio de trabajo está configurado correctamente. +// Para ejecutarlo, busca el directorio actual en la terminal y escribe `go run main.go` +// Si el texto "Hello World" no se muestra, entonces configura tu ambiente de trabajo nuevamente. +package main + +import ( + "fmt" + "mymath" +) + +func main() { + fmt.Printf("Hello, world. Sqrt(2) = %v\n", mymath.Sqrt(2)) +} diff --git a/es/code/src/mymath/sqrt.go b/es/code/src/mymath/sqrt.go new file mode 100644 index 00000000..662bb3cf --- /dev/null +++ b/es/code/src/mymath/sqrt.go @@ -0,0 +1,12 @@ +// Código de ejmplo para el capítulo 1.2 de "Construye Aplicaciones Web con Golang" +// Propósito: Muestra como crear un paquete simple llamado `mymath` +// Este paquete debe ser importado desde otro archivo Go para poder ejecutarse. +package mymath + +func Sqrt(x float64) float64 { + z := 0.0 + for i := 0; i < 1000; i++ { + z -= (z*z - x) / (2 * x) + } + return z +} diff --git a/es/images/1.1.cmd.png b/es/images/1.1.cmd.png new file mode 100644 index 00000000..0df2504b Binary files /dev/null and b/es/images/1.1.cmd.png differ diff --git a/es/images/1.1.linux.png b/es/images/1.1.linux.png new file mode 100644 index 00000000..539563d9 Binary files /dev/null and b/es/images/1.1.linux.png differ diff --git a/es/images/1.1.mac.png b/es/images/1.1.mac.png new file mode 100644 index 00000000..ad2ceed6 Binary files /dev/null and b/es/images/1.1.mac.png differ diff --git a/es/images/1.3.go.png b/es/images/1.3.go.png new file mode 100644 index 00000000..8155b2d5 Binary files /dev/null and b/es/images/1.3.go.png differ diff --git a/es/images/1.4.eclipse1.png b/es/images/1.4.eclipse1.png new file mode 100644 index 00000000..5b2f10d8 Binary files /dev/null and b/es/images/1.4.eclipse1.png differ diff --git a/es/images/1.4.eclipse2.png b/es/images/1.4.eclipse2.png new file mode 100644 index 00000000..55931f33 Binary files /dev/null and b/es/images/1.4.eclipse2.png differ diff --git a/es/images/1.4.eclipse3.png b/es/images/1.4.eclipse3.png new file mode 100644 index 00000000..3c7bd634 Binary files /dev/null and b/es/images/1.4.eclipse3.png differ diff --git a/es/images/1.4.eclipse4.png b/es/images/1.4.eclipse4.png new file mode 100644 index 00000000..d4ee77af Binary files /dev/null and b/es/images/1.4.eclipse4.png differ diff --git a/es/images/1.4.eclipse5.png b/es/images/1.4.eclipse5.png new file mode 100644 index 00000000..8a89555d Binary files /dev/null and b/es/images/1.4.eclipse5.png differ diff --git a/es/images/1.4.eclipse6.png b/es/images/1.4.eclipse6.png new file mode 100644 index 00000000..7771ec2e Binary files /dev/null and b/es/images/1.4.eclipse6.png differ diff --git a/es/images/1.4.emacs.png b/es/images/1.4.emacs.png new file mode 100644 index 00000000..3dd6845f Binary files /dev/null and b/es/images/1.4.emacs.png differ diff --git a/es/images/1.4.idea1.png b/es/images/1.4.idea1.png new file mode 100644 index 00000000..87d2e51e Binary files /dev/null and b/es/images/1.4.idea1.png differ diff --git a/es/images/1.4.idea2.png b/es/images/1.4.idea2.png new file mode 100644 index 00000000..8059b20f Binary files /dev/null and b/es/images/1.4.idea2.png differ diff --git a/es/images/1.4.idea3.png b/es/images/1.4.idea3.png new file mode 100644 index 00000000..574e1d74 Binary files /dev/null and b/es/images/1.4.idea3.png differ diff --git a/es/images/1.4.idea4.png b/es/images/1.4.idea4.png new file mode 100644 index 00000000..f6e5138d Binary files /dev/null and b/es/images/1.4.idea4.png differ diff --git a/es/images/1.4.idea5.png b/es/images/1.4.idea5.png new file mode 100644 index 00000000..7784a611 Binary files /dev/null and b/es/images/1.4.idea5.png differ diff --git a/es/images/1.4.liteide.png b/es/images/1.4.liteide.png new file mode 100644 index 00000000..f28d755e Binary files /dev/null and b/es/images/1.4.liteide.png differ diff --git a/es/images/1.4.sublime1.png b/es/images/1.4.sublime1.png new file mode 100644 index 00000000..60f2b3db Binary files /dev/null and b/es/images/1.4.sublime1.png differ diff --git a/es/images/1.4.sublime2.png b/es/images/1.4.sublime2.png new file mode 100644 index 00000000..a888636f Binary files /dev/null and b/es/images/1.4.sublime2.png differ diff --git a/es/images/1.4.sublime3.png b/es/images/1.4.sublime3.png new file mode 100644 index 00000000..8b2eb3dc Binary files /dev/null and b/es/images/1.4.sublime3.png differ diff --git a/es/images/1.4.sublime4.png b/es/images/1.4.sublime4.png new file mode 100644 index 00000000..b0fef624 Binary files /dev/null and b/es/images/1.4.sublime4.png differ diff --git a/es/images/1.4.vim.png b/es/images/1.4.vim.png new file mode 100644 index 00000000..27a15c05 Binary files /dev/null and b/es/images/1.4.vim.png differ diff --git a/es/images/13.1.flow.png b/es/images/13.1.flow.png new file mode 100644 index 00000000..b47e5bfc Binary files /dev/null and b/es/images/13.1.flow.png differ diff --git a/es/images/13.1.gopath.png b/es/images/13.1.gopath.png new file mode 100644 index 00000000..c948437a Binary files /dev/null and b/es/images/13.1.gopath.png differ diff --git a/es/images/13.1.gopath2.png b/es/images/13.1.gopath2.png new file mode 100644 index 00000000..450b4104 Binary files /dev/null and b/es/images/13.1.gopath2.png differ diff --git a/es/images/13.4.beego.png b/es/images/13.4.beego.png new file mode 100644 index 00000000..96a9d274 Binary files /dev/null and b/es/images/13.4.beego.png differ diff --git a/es/images/14.1.bootstrap.png b/es/images/14.1.bootstrap.png new file mode 100644 index 00000000..13ab7f82 Binary files /dev/null and b/es/images/14.1.bootstrap.png differ diff --git a/es/images/14.1.bootstrap2.png b/es/images/14.1.bootstrap2.png new file mode 100644 index 00000000..753ffc79 Binary files /dev/null and b/es/images/14.1.bootstrap2.png differ diff --git a/es/images/14.1.bootstrap3.png b/es/images/14.1.bootstrap3.png new file mode 100644 index 00000000..460b8183 Binary files /dev/null and b/es/images/14.1.bootstrap3.png differ diff --git a/es/images/14.4.github.png b/es/images/14.4.github.png new file mode 100644 index 00000000..4da4c6f5 Binary files /dev/null and b/es/images/14.4.github.png differ diff --git a/es/images/14.4.github2.png b/es/images/14.4.github2.png new file mode 100644 index 00000000..c3ae04bf Binary files /dev/null and b/es/images/14.4.github2.png differ diff --git a/es/images/14.4.github3.png b/es/images/14.4.github3.png new file mode 100644 index 00000000..e98768c3 Binary files /dev/null and b/es/images/14.4.github3.png differ diff --git a/es/images/14.6.pprof.png b/es/images/14.6.pprof.png new file mode 100644 index 00000000..532f1a76 Binary files /dev/null and b/es/images/14.6.pprof.png differ diff --git a/es/images/14.6.pprof2.png b/es/images/14.6.pprof2.png new file mode 100644 index 00000000..610c93a4 Binary files /dev/null and b/es/images/14.6.pprof2.png differ diff --git a/es/images/14.6.pprof3.png b/es/images/14.6.pprof3.png new file mode 100644 index 00000000..a3b9f7ba Binary files /dev/null and b/es/images/14.6.pprof3.png differ diff --git a/es/images/2.2.array.png b/es/images/2.2.array.png new file mode 100644 index 00000000..5560023b Binary files /dev/null and b/es/images/2.2.array.png differ diff --git a/es/images/2.2.basic.png b/es/images/2.2.basic.png new file mode 100644 index 00000000..9bac6a0f Binary files /dev/null and b/es/images/2.2.basic.png differ diff --git a/es/images/2.2.makenew.png b/es/images/2.2.makenew.png new file mode 100644 index 00000000..00f74179 Binary files /dev/null and b/es/images/2.2.makenew.png differ diff --git a/es/images/2.2.slice.png b/es/images/2.2.slice.png new file mode 100644 index 00000000..119f2141 Binary files /dev/null and b/es/images/2.2.slice.png differ diff --git a/es/images/2.2.slice2.png b/es/images/2.2.slice2.png new file mode 100644 index 00000000..0729a1bf Binary files /dev/null and b/es/images/2.2.slice2.png differ diff --git a/es/images/2.3.init.png b/es/images/2.3.init.png new file mode 100644 index 00000000..abe7cfad Binary files /dev/null and b/es/images/2.3.init.png differ diff --git a/es/images/2.4.student_struct.png b/es/images/2.4.student_struct.png new file mode 100644 index 00000000..7c4f87ac Binary files /dev/null and b/es/images/2.4.student_struct.png differ diff --git a/es/images/2.5.rect_func_without_receiver.png b/es/images/2.5.rect_func_without_receiver.png new file mode 100644 index 00000000..b4b571fd Binary files /dev/null and b/es/images/2.5.rect_func_without_receiver.png differ diff --git a/es/images/2.5.shapes_func_with_receiver_cp.png b/es/images/2.5.shapes_func_with_receiver_cp.png new file mode 100644 index 00000000..2d26a01d Binary files /dev/null and b/es/images/2.5.shapes_func_with_receiver_cp.png differ diff --git a/es/images/2.5.shapes_func_without_receiver.png b/es/images/2.5.shapes_func_without_receiver.png new file mode 100644 index 00000000..112f56fc Binary files /dev/null and b/es/images/2.5.shapes_func_without_receiver.png differ diff --git a/es/images/3.1.dns2.png b/es/images/3.1.dns2.png new file mode 100644 index 00000000..f432edf3 Binary files /dev/null and b/es/images/3.1.dns2.png differ diff --git a/es/images/3.1.dns_hierachy.png b/es/images/3.1.dns_hierachy.png new file mode 100644 index 00000000..8dfeb232 Binary files /dev/null and b/es/images/3.1.dns_hierachy.png differ diff --git a/es/images/3.1.dns_inquery.png b/es/images/3.1.dns_inquery.png new file mode 100644 index 00000000..b95d952e Binary files /dev/null and b/es/images/3.1.dns_inquery.png differ diff --git a/es/images/3.1.http.png b/es/images/3.1.http.png new file mode 100644 index 00000000..25108bf3 Binary files /dev/null and b/es/images/3.1.http.png differ diff --git a/es/images/3.1.httpPOST.png b/es/images/3.1.httpPOST.png new file mode 100644 index 00000000..31d02020 Binary files /dev/null and b/es/images/3.1.httpPOST.png differ diff --git a/es/images/3.1.response.png b/es/images/3.1.response.png new file mode 100644 index 00000000..978de790 Binary files /dev/null and b/es/images/3.1.response.png differ diff --git a/es/images/3.1.web.png b/es/images/3.1.web.png new file mode 100644 index 00000000..5b98b5dc Binary files /dev/null and b/es/images/3.1.web.png differ diff --git a/es/images/3.1.web2.png b/es/images/3.1.web2.png new file mode 100644 index 00000000..a604c217 Binary files /dev/null and b/es/images/3.1.web2.png differ diff --git a/es/images/3.2.goweb.png b/es/images/3.2.goweb.png new file mode 100644 index 00000000..d6a53829 Binary files /dev/null and b/es/images/3.2.goweb.png differ diff --git a/es/images/3.3.http.png b/es/images/3.3.http.png new file mode 100644 index 00000000..40137e33 Binary files /dev/null and b/es/images/3.3.http.png differ diff --git a/es/images/3.3.illustrator.png b/es/images/3.3.illustrator.png new file mode 100644 index 00000000..8159b8bb Binary files /dev/null and b/es/images/3.3.illustrator.png differ diff --git a/es/images/4.1.login.png b/es/images/4.1.login.png new file mode 100644 index 00000000..dfca39df Binary files /dev/null and b/es/images/4.1.login.png differ diff --git a/es/images/4.1.slice.png b/es/images/4.1.slice.png new file mode 100644 index 00000000..3405c147 Binary files /dev/null and b/es/images/4.1.slice.png differ diff --git a/es/images/4.3.escape.png b/es/images/4.3.escape.png new file mode 100644 index 00000000..76ce1245 Binary files /dev/null and b/es/images/4.3.escape.png differ diff --git a/es/images/4.4.token.png b/es/images/4.4.token.png new file mode 100644 index 00000000..b52cc1d1 Binary files /dev/null and b/es/images/4.4.token.png differ diff --git a/es/images/4.5.upload.png b/es/images/4.5.upload.png new file mode 100644 index 00000000..e5766e38 Binary files /dev/null and b/es/images/4.5.upload.png differ diff --git a/es/images/4.5.upload2.png b/es/images/4.5.upload2.png new file mode 100644 index 00000000..06460446 Binary files /dev/null and b/es/images/4.5.upload2.png differ diff --git a/es/images/5.6.mongodb.png b/es/images/5.6.mongodb.png new file mode 100644 index 00000000..6161fbe5 Binary files /dev/null and b/es/images/5.6.mongodb.png differ diff --git a/es/images/6.1.cookie.png b/es/images/6.1.cookie.png new file mode 100644 index 00000000..b94559cf Binary files /dev/null and b/es/images/6.1.cookie.png differ diff --git a/es/images/6.1.cookie2.png b/es/images/6.1.cookie2.png new file mode 100644 index 00000000..2888e392 Binary files /dev/null and b/es/images/6.1.cookie2.png differ diff --git a/es/images/6.1.session.png b/es/images/6.1.session.png new file mode 100644 index 00000000..f538b8f5 Binary files /dev/null and b/es/images/6.1.session.png differ diff --git a/es/images/6.4.cookie.png b/es/images/6.4.cookie.png new file mode 100644 index 00000000..0dad93f1 Binary files /dev/null and b/es/images/6.4.cookie.png differ diff --git a/es/images/6.4.hijack.png b/es/images/6.4.hijack.png new file mode 100644 index 00000000..5ab0753f Binary files /dev/null and b/es/images/6.4.hijack.png differ diff --git a/es/images/6.4.hijacksuccess.png b/es/images/6.4.hijacksuccess.png new file mode 100644 index 00000000..57f48d41 Binary files /dev/null and b/es/images/6.4.hijacksuccess.png differ diff --git a/es/images/6.4.setcookie.png b/es/images/6.4.setcookie.png new file mode 100644 index 00000000..dbb52170 Binary files /dev/null and b/es/images/6.4.setcookie.png differ diff --git a/es/images/7.4.template.png b/es/images/7.4.template.png new file mode 100644 index 00000000..195e24fb Binary files /dev/null and b/es/images/7.4.template.png differ diff --git a/es/images/8.1.socket.png b/es/images/8.1.socket.png new file mode 100644 index 00000000..93dd544d Binary files /dev/null and b/es/images/8.1.socket.png differ diff --git a/es/images/8.2.websocket.png b/es/images/8.2.websocket.png new file mode 100644 index 00000000..b293c653 Binary files /dev/null and b/es/images/8.2.websocket.png differ diff --git a/es/images/8.2.websocket2.png b/es/images/8.2.websocket2.png new file mode 100644 index 00000000..b744c634 Binary files /dev/null and b/es/images/8.2.websocket2.png differ diff --git a/es/images/8.2.websocket3.png b/es/images/8.2.websocket3.png new file mode 100644 index 00000000..ee769c16 Binary files /dev/null and b/es/images/8.2.websocket3.png differ diff --git a/es/images/8.3.rest.png b/es/images/8.3.rest.png new file mode 100644 index 00000000..0c1e5b54 Binary files /dev/null and b/es/images/8.3.rest.png differ diff --git a/es/images/8.3.rest2.png b/es/images/8.3.rest2.png new file mode 100644 index 00000000..b43c0804 Binary files /dev/null and b/es/images/8.3.rest2.png differ diff --git a/es/images/8.3.rest3.png b/es/images/8.3.rest3.png new file mode 100644 index 00000000..1f62b505 Binary files /dev/null and b/es/images/8.3.rest3.png differ diff --git a/es/images/8.4.rpc.png b/es/images/8.4.rpc.png new file mode 100644 index 00000000..0b3fcfe2 Binary files /dev/null and b/es/images/8.4.rpc.png differ diff --git a/es/images/9.1.csrf.png b/es/images/9.1.csrf.png new file mode 100644 index 00000000..54d3a434 Binary files /dev/null and b/es/images/9.1.csrf.png differ diff --git a/es/images/cover.png b/es/images/cover.png new file mode 100644 index 00000000..22bfab44 Binary files /dev/null and b/es/images/cover.png differ diff --git a/es/images/ebook.jpg b/es/images/ebook.jpg new file mode 100644 index 00000000..b2f3710d Binary files /dev/null and b/es/images/ebook.jpg differ diff --git a/es/images/navi1.png b/es/images/navi1.png new file mode 100644 index 00000000..92a7669e Binary files /dev/null and b/es/images/navi1.png differ diff --git a/es/images/navi10.png b/es/images/navi10.png new file mode 100644 index 00000000..94935e27 Binary files /dev/null and b/es/images/navi10.png differ diff --git a/es/images/navi11.png b/es/images/navi11.png new file mode 100644 index 00000000..8eb93cb1 Binary files /dev/null and b/es/images/navi11.png differ diff --git a/es/images/navi12.png b/es/images/navi12.png new file mode 100644 index 00000000..5bdbadfa Binary files /dev/null and b/es/images/navi12.png differ diff --git a/es/images/navi13.png b/es/images/navi13.png new file mode 100644 index 00000000..c797033b Binary files /dev/null and b/es/images/navi13.png differ diff --git a/es/images/navi14.png b/es/images/navi14.png new file mode 100644 index 00000000..3d9d38cc Binary files /dev/null and b/es/images/navi14.png differ diff --git a/es/images/navi2.png b/es/images/navi2.png new file mode 100644 index 00000000..d18526ac Binary files /dev/null and b/es/images/navi2.png differ diff --git a/es/images/navi3.png b/es/images/navi3.png new file mode 100644 index 00000000..23495893 Binary files /dev/null and b/es/images/navi3.png differ diff --git a/es/images/navi4.png b/es/images/navi4.png new file mode 100644 index 00000000..1b4df73a Binary files /dev/null and b/es/images/navi4.png differ diff --git a/es/images/navi5.png b/es/images/navi5.png new file mode 100644 index 00000000..55788152 Binary files /dev/null and b/es/images/navi5.png differ diff --git a/es/images/navi6.png b/es/images/navi6.png new file mode 100644 index 00000000..74cab817 Binary files /dev/null and b/es/images/navi6.png differ diff --git a/es/images/navi7.png b/es/images/navi7.png new file mode 100644 index 00000000..2e1c974e Binary files /dev/null and b/es/images/navi7.png differ diff --git a/es/images/navi8.png b/es/images/navi8.png new file mode 100644 index 00000000..7a52d84e Binary files /dev/null and b/es/images/navi8.png differ diff --git a/es/images/navi9.png b/es/images/navi9.png new file mode 100644 index 00000000..7692e113 Binary files /dev/null and b/es/images/navi9.png differ diff --git a/es/images/polling.png b/es/images/polling.png new file mode 100644 index 00000000..8bd128ec Binary files /dev/null and b/es/images/polling.png differ diff --git a/es/ref.md b/es/ref.md new file mode 100644 index 00000000..ffac20da --- /dev/null +++ b/es/ref.md @@ -0,0 +1,14 @@ +# Apéndice A - Referencias + +Este libro es una suma de mi experiencia con Go, parte del contenido es de blogs o sitios web de otros ghopers. Les agradecemos! + +1. [golang blog](http://blog.golang.org) +2. [Russ Cox blog](http://research.swtch.com/) +3. [go book](http://go-book.appsp0t.com/) +4. [golangtutorials](http://golangtutorials.blogspot.com) +5. [轩脉刃de刀光剑影](http://www.cnblogs.com/yjf512/) +6. [Go Programming Language](http://golang.org/doc/) +7. [Network programming with Go](http://jan.newmarch.name/go/) +8. [setup-the-rails-application-for-internationalization](http://guides.rubyonrails.org/i18n.html#setup-the-rails-application-for-internationalization) +9. [The Cross-Site Scripting (XSS) FAQ](http://www.cgisecurity.com/xss-faq.html) +10. [Network programming with Go](http://jan.newmarch.name/go) diff --git a/fr/01.0.md b/fr/01.0.md new file mode 100644 index 00000000..91966ce2 --- /dev/null +++ b/fr/01.0.md @@ -0,0 +1,30 @@ +# 1 Configuration de votre environnement de développement Go + +Bienvenue dans le monde de Go, commençons notre exploration! + +Go est un langage de progammation système concurrent à la compilation rapide et disposant d'un rammasse-miettes. +Il a les avantages suivants: + +- Compilation d'un large projet en quelques secondes. +- Fournit un modèle de développement facile à gérer, évitant la plupart des problèmes liés aux fichiers d'en-tête C. +- C'est un langage statique avec un système de types de données simple, afin que les utilisateurs n'aient pas à perdre du temps à gérer +les relations entre types. Il peut-être vu comme un langage orienté-objet simplifié. +- Il possède un ramasse-miettes. Il fournit un support de base pour la concurrence et de la communication. +- Conçu pour les ordinateurs multi-core. + +Go est un langage compilé. Il combine l'efficacité de développement des langages interprétés ou dynamiques avec la sécurité de langues statiques. +Il va être la langue de choix pour les ordinateurs modernes multi-core inter-connectés. À ces fins, il ya quelques problèmes qui +doivent fondamentalement être résolu au niveau de ce langage, comme un système de types très expressif et léger, un modèle de concurrence natif, +et un ramasse-miettes géré strictement. Durant longtemps, aucun paquet ou outil n'est apparu qui avait pour but de résoudre tous ces problèmes +de façon pragmatique; ainsi naquit la motivation pour du langage Go. + +Dans ce chapitre, je vais vous montrer comment installer et configurer votre propre environnement de développement Go. + +## Table des matières + +![](images/navi1.png?raw=true) + +## Navigation + +- [Table des matières](preface.md) +- Section suivante: [Installation](01.1.md) diff --git a/fr/01.1.md b/fr/01.1.md new file mode 100644 index 00000000..bde9fece --- /dev/null +++ b/fr/01.1.md @@ -0,0 +1,148 @@ +# 1.1 Installation + +## 3 méthodes d'installation + +Il y a plusieurs façons de configurer votre environnement de développement Go sur votre ordinateur, +vous pouvez choisir celle qui vous convient le mieux. Les trois façons les plus courantes sont les suivantes. + +- Paquets d'installation officiels: + - L'équipe de Go propose des paquets d'installation pour Windows, Linux, Mac et encore d'autres systèmes d'exploitation. + C'est propablement la méthode la plus simple pour commencer. +- Installation manuelle via les sources + - Populaire chez les développeurs habitués aux environnements type Unix. +- Utilisation d'outils tiers. + - Il y a plusieurs outils tiers et gestionnaires pour installer Go, comme apt-get pour Ubuntu et homebrew pour Mac. + +Dans le cas où vous voudriez installer plus d'une version de Go sur votre machine, vous devriez jeter un oeil à l'outil [GVM](https://github.com/moovweb/gvm). +C'est le meilleur outil pour accomplir cette tâche, sinon vous devrez le faire vous-même. + +##Installation à partir des sources + +Parce-que certaines parties de Go sont écrits en C Plan 9 et en assembleur AT&T, vous devez installer un compilateur C avant de continuer. + +Sous Mac, si vous avez Xcode d'installé, vous disposé déjà d'un compilateur. + +Sur un système type Unix, vous devez installer gcc ou un compilateur équivalent. Par exemple, en utilisant le gestionnaire de paquets apt-get(livré avec Ubuntu), +vous pouvez installer les compilateurs requis comme suit: + + `sudo apt-get install gcc libc6-dev` + +Sous Windows, vous devez installer MinGW pour installer gcc. N'oubliez pas de configurer vos varaibles d'environnement après avoir finalisé l'installation. + +L'équipe Go utilise [Mercurial](http://mercurial.selenic.com/downloads/) pour gérer le code source, vous devez commencer par installer celui-ci pour +télécharger le code source de Go. + +Une fois Mercurial installé, exécutez les commandes suivantes pour cloner le code source de Go et le compiler: + + hg clone -u release https://code.google.com/p/go + cd go/src + ./all.bash + +Une installation réussie finira en affichant le message "ALL TESTS PASSED." + +Sous Windows, vous pouvez arriver à faire la même chose en lançant `all.bat`. + +Si vous utilisez Windows, le paquet d'installation va mettre à jour automatiquement vos variables d'environnement. +Sous Unix, vous devez configurer celles-ci manuellement comme suit: + + export GOROOT=$HOME/go + export GOBIN=$GOROOT/bin + export PATH=$PATH:$GOROOT/bin + +Si vous voyez l'affichage suivant sur votre écran, l'installation s'est terminée avec succès. + +![](images/1.1.mac.png?raw=true) + +Figure 1.1 Information après installation + +Lorsque vous voyez les informations d'utilisation de Go, cela signifie que vous avez installé Go avec succès sur votre ordinateur. +Si votre système affiche 'aucune commande Go', vérifiez que votre variable d'environnement $PATH contient bien le chemin d'installation de Go. + +## Utilisation des paquets standards d'installation + +Go a des paquets d'installation rapides pour chaque système d'exploitation supporté. +Ces paquets installent Go dans `/usr/local/go` (`c:\Go` sous Windows) par défaut. Bien sûr, cela est configurable, mais vous aurez également à changer manuellement +les variables d'environnement comme décrit précédemment. + +### Comme savoir si votre système est 32 ou 64 bits? + +L'étape suivante dépend du type d'architecture de votre système, nous devons donc le vérifier avant de télécharger les paquets d'installation. + +Si vous utilisez Windows , tapez `Win+R` et lancez l'outil de commandes `cmd`. +Lancez la commande `systeminfo` qui va vous afficher des informations très utiles sur votre système. +Trouvez la ligne indiquant "type du système" - si vous voyez "x64-based PC" cela signifie que votre système est 64-bit, sinon il est 32-bit. + +Je vous recommande fortement de télécharger le paquet 64-bit si vous êtes sous Mac, comme Go ne supporte plus les processeurs 32-bit sous Mac OSX. + +Les utilisateurs Linux peuvent exécuter `uname -a` dans un terminal pour afficher les informations système. +Un système d'exploitation 64-bit affichera les informations suivantes: + + x86_64 x86_64 x86_64 GNU/Linux + +Certaines machines comme Ubuntu 10.04 afficheront simplement: + + x86_64 GNU/Linux + +Les systèmes 32-bit afficheront quant à eux: + + i686 i686 i386 GNU/Linux + +### Mac + +Aller sur la [page de téléchargement][downlink], choisir `go1.4.darwin-386.pkg` pour le systèmes 32-bit +et `go1.4.darwin-amd64.pkg` pour les 64-bit. Cliquez "next" jusqu'à la fin du processus, `~/go/bin` sera ajouté au $PATH du système à la fin de l'installation. +Maintenant ouvrez un terminal et tapez `go`. Vous devriez avoir la même sortie qu'en figure 1.1. + +### Linux + +Aller à la [page de téléchargement][downlink], choisir `go1.4.linux-386.tar.gz` pour les systèmes 32-bit et +`go1.4.linux-amd64.tar.gz` en 64-bit. Supposons que vous voulez installer Go dans `$GO_INSTALL_DIR` path. +Décompressez l'archive `tar.gz` dans le dossier désiré de destination en utilisant la commande `tar zxvf go1.4.linux-amd64.tar.gz -C $GO_INSTALL_DIR`. +Ensuite définissez votre $PATH avec: `export PATH=$PATH:$GO_INSTALL_DIR/go/bin`. +Vous pouvez maintenant ouvrir un terminal et tapez `go`. Vous devriez avoir la même sortie qu'en figure 1.1. + +### Windows + +Allez à la [page de téléchargement][downlink], choisissez `go1.4.windows-386.msi` pour les systèmes 32-bit et +`go1.4.windows-amd64.msi` pour le ssystèmes 64-bit. Cliquez "next" jusqu'à la fin du processus, `c:/go/bin` sera ajhouté à `path`. +Vous pouvez maintenant ouvrir un terminal et tapez `go`. Vous devriez avoir la même sortie qu'en figure 1.1. + +## Utilisez des outils tiers + +### GVM + +GVM est un outil de gestion de versions multiples développé par un tiers, comme rvm pour ruby. +Il est simple d'utilisation. Installez GVM avec les commandes suivantes dans votre terminal: + + bash < <(curl -s https://raw.github.com/moovweb/gvm/master/binscripts/gvm-installer) + +Ensuite nous installons Go avec les commandes suivantes: + + gvm install go1.4 + gvm use go1.4 + +À la fin du processus, Go est installé. + +### apt-get + +Ubuntu est la version bureau la plus utilisée de Linux. Elle utilise `apt-get` comme gestionnaire de paquets. +On peut installer Go avec les commandes suivantes: + + sudo add-apt-repository ppa:gophers/go + sudo apt-get update + sudo apt-get install golang-stable + +### Homebrew + +Homebrew est un outil de gestion de logiciels communément utilisé sous Mac pour gérer les paquets. +On peut installer Go avec les commandes suivantes: + + brew install go + +## Navigation + +- [Tables des matières](preface.md) +- Section précédente: [Configuration de votre environnement Go](01.0.md) +- Section suivante: [$GOPATH et workspace](01.2.md) + +[downlink]: http://golang.org/dl/ "Téléchargement de Go" diff --git a/fr/01.2.md b/fr/01.2.md new file mode 100644 index 00000000..f9056be3 --- /dev/null +++ b/fr/01.2.md @@ -0,0 +1,181 @@ +#1.2 $GOPATH et workspace + +## $GOPATH + +Les commandes Go reposent sur une variable d'environnement nommée $GOPATH1. Notez que ce n'est pas la variable $GOROOT où Go est installé. +Cette variable pointe vers votre espace de travail(workspace) Go de votre ordinateur (J'utilise ce chemin sur mon ordinateur; si vous n'utilisez pas +la même structure de dossiers, veillez à le faire correspondre par vous-même). + +Dans un système de type Unix, la variable peut-être configurée comme suit: + + export GOPATH=/home/apple/mygo + +Pour plus de commodité, vous devriez ajouter une ligne à votre .bashrc ou .zshrc, ou tout autre fichier de configuration de configuration du shell approprié. + +Sous Windows, vous devez créer une variable d'environnement nommée GOPATH, et définir sa valeur à `c:\mygo`: + + GOPATH=c:\mygo + +Il est possible d'avoir plusieurs répertoires dans votre $GOPATH, à séparer par un `:` sous Unix, et `;` sous Windows + +Dans votre $GOPATH vous devez avoir trois sous-répertoires: + +* `src` pour héberger le code source (par exemple: .go .c .h .s, etc.) +* `pkg` pour les fichiers compilés (par exemple: .a) +* `bin` pour les fichiers exécutable compilés + +Dans le reste de ce livre, j'utilise le dossier `Mygo` comme répertoire de mon $GOPATH. + +## Dossier de paquets + +Créez les fichiers et dossiers d'un paquet source comme `$GOPATH/src/mymath/sqrt.go` (`mymath` est le nom du paquet) + +Chaque fois que vous créez un paquet, vous devriez créer un nouveau dossier dans le répertoire `src`. +Les noms de dossiers correspondent généralement à celui du paquet que vous souhaitez utiliser. +Vous pouvez avoir plusieurs niveaux de dossiers si vous le désirez. +Par exemple si vous créez le dossier `$GOPATH/src/github.com/astaxie/beedb`, alors le chemin du paquet sera `github.com/astaxie/beedb`. +Le nom du paquet sera celui du dernier dossier de votre chemin, qui est `beedb` dans notre exemple. + +Exécutez les commandes suivantes: + + cd $GOPATH/src + mkdir mymath + +Créez un nouveau fichier `sqrt.go`, ajoutez le contenu suivant à celui-ci: + + // Code source de $GOPATH/src/mymath/sqrt.go + package mymath + + func Sqrt(x float64) float64 { + z := 0.0 + for i := 0; i < 1000; i++ { + z -= (z*z - x) / (2 * x) + } + return z + } + +Maintenant le dossier de mon paquet a été créé et son code écrit. Je vous recommande d'utiliser le même nom pour vos paquets et leurs dossiers, +et que les dossiers contiennent tous les fichiers sources du paquet. + +## Compilation des paquets + +Nous avons créé notre paquet précédemment, mais comment le compiler pour un usage concret? Il y a deux méthodes différentes. + +1. Placez-vous dans le dossier contenant votre paquet, puis exécutez la commande `go install`. +2. Exécutez la commande précédente mais en passant un nom de fichier en paramètre, comme `go install mymath`. + +Après compilation, on peut ouvrir le dossier suivant: + + cd $GOPATH/pkg/${GOOS}_${GOARCH} + // On peut y trouver le fichier compilé + mymath.a + +Le fichier dont le suffixe est `.a` est le fichier binaire de notre paquet. Comment l'utiliser? + +Assurément, nous devons créer une application pour l'utiliser. + +Créez un nouveau paquet appelé `mathapp`. + + cd $GOPATH/src + mkdir mathapp + cd mathapp + vim main.go + +Le code de `main.go` + + //code source de $GOPATH/src/mathapp/main.go. + package main + + import ( + "mymath" + "fmt" + ) + + func main() { + fmt.Printf("Hello, world. Sqrt(2) = %v\n", mymath.Sqrt(2)) + } + +Pour compiler cette application, vous devez vous placer dans le dossier du paquet + + cd $GOPATH/src/mathapp + +puis exécutez + + go install + +Vous devriez désormais voir un fichier exécutable `mathapp` généré dans le dossier `$GOPATH/bin/`. +Pour lancer ce programme, utilisez la commande + + ./mathapp + +Vous devriez voir le contenu suivant dans votre temrinal: + + Hello world. Sqrt(2) = 1.414213562373095 + +## Installer des paquets distants + +Go a un outil pour installer des paquets distants, qui est l'outil `go get`.Il supporte la majorité des communautés libres, comme +Github, Google Code, BitBucket, et Launchpad. + + go get github.com/astaxie/beedb + +>Vous pouvez utiliser `go get -u` pour mettre à jour vos paquets distants, cela mettra aussi à jour les dépendances. + +Vous obtiendrez le code source des paquets désirés grâce à cette commande, depuis différentes plate-formes, utilisant chacune leur système de gestion de version. +Par exemple, `git` pour Github et `hg` pour Google Code. Ainsi vous devrez au préalable installer le client du système de gestion de version approprié +avant d'utiliser`go get`. + +Après avoir utilisé les commandes précédentes, votre structure de dossier devrait ressembler à celle-ci: + + $GOPATH + src + |-github.com + |-astaxie + |-beedb + pkg + |--${GOOS}_${GOARCH} + |-github.com + |-astaxie + |-beedb.a + +En fait, `go get` clone le source code dans le dossier $GOPATH/src en local, puis exécute `go install`. + +Vous pouvez utiliser des paquets distants de manière similaire aux paquets locaux. + + import "github.com/astaxie/beedb" + +## Arborescence complète de dossier + +Si vous avez suivi toutes les étapes précédentes, la structure de votre dossier ressemble désormais à ceci: + + bin/ + mathapp + pkg/ + ${GOOS}_${GOARCH}, such as darwin_amd64, linux_amd64 + mymath.a + github.com/ + astaxie/ + beedb.a + src/ + mathapp + main.go + mymath/ + sqrt.go + github.com/ + astaxie/ + beedb/ + beedb.go + util.go + +Vous pouvez désormais vous rendre compte de manière plus claire de l'arborescence; `bin` contient les exécutables, `pkg` les fichiers compilés et +`src` les paquets sources. + + - - - +[1] Le format des variables d'environnement sous Windows est `%GOPATH%`, pourtant ce livre suit principalement la norme Unix, +les utilisateurs Windows devront faire les modifications appropriées. + +## Navigation + +- [Table des matières](preface.md) +- Section précédente: [Installation](01.1.md) +- Section suivante: [Go commands](01.3.md) diff --git a/fr/01.3.md b/fr/01.3.md new file mode 100644 index 00000000..4be96441 --- /dev/null +++ b/fr/01.3.md @@ -0,0 +1,133 @@ +#1.3 Commandes Go + +## Commandes Go + +Le langage Go est disponible par défaut avec un ensemble complet d'outils. Vous pouvez exécuter la ligne de commande `go` pour les afficher: + +![](images/1.3.go.png?raw=true) + +Figure 1.3 Informations détaillées affichées par la commande `go` + +Elles ont toutes une utilité. Voyons l'utilisation de certaines d'entre elles. + +## go build + +Cette commande sert de tests de compilation. Elle compilera les paquets dépendants au besoin. + +- Si le paquet n'est pas le paquet `main`, comme `mymath` en section 1.2, rien ne sera généré après l'exécution de `go build`. +Si vous avez besoin de fichier de paquet `.a` dans `$GOPATH/pkg`, utilisez plutôt `go install` à la place. +- Si le paquet est le paquet `main`, la commande générera un exécutable dans le même dossier. +Si vous voulez que l'exécutable soit généré dans `$GOPATH/bin`, utilisez `go install` ou `go build -o ${VOTRE_CHEMIN}/a.exe.` +- S'il y a plusieurs fichiers dans le dossier, mais que vous voulez juste compiler un d'entre eux, ajoutez le nom de ce fichier après `go build`. +Par exemple, `go build a.go`. `go build` va compiler les fichiers dans ce dossier. +- Vous pouvez également définir le nom du fichier généré. Par exemple, dans le projet `mathapp` (section 1.2), lancer `go build -o astaxie.exe` va générer `astaxie.exe` au lieu de `mathapp.exe`. +Le nom par défaut est le nom du dossier (package nom `main`) ou celui du premier fichier source (paquet `main`). + +(D'après [Les Spécifications du Langage Go](https://golang.org/ref/spec), les noms de paquets devraient être ceux suivant la déclaration `package` en première ligne de vos fichiers sources. +Cela n'a pas à être le même que celui du dossier, et que le nom de fichier de l'exécutable soit celui du dossier par défaut.) + +- `go build` ignore les fichiers dont le nom commence par `_` ou `.`. +- Si vous voulez avoir différents fichiers sources par système d'exploitation, vous pouvez nommer vos fichiers avec pour suffixe le nom du système. +Supposez qu'il y ait plusieurs fichiers pour charger des tableaux. Ces fichiers peuvent être nommés comme suit: + + array_linux.go | array_darwin.go | array_windows.go | array_freebsd.go + +`go build` choisira celui qui correspondra à votre système d'exploitation. Par exemple, seul sera compilé `array_linux.go` sous Linux, +les autres seront ignorés. + +## go clean + +Cette commande sert à supprimer les fichiers générés par le compilateur, comprenant les fichiers suivants: + + _obj/ // Ancien dossier objet, créé par les Makefiles + _test/ // Ancien dossier test, créé par les Makefiles + _testmain.go // Ancien dossier de gotest, créé par les Makefiles + test.out // Ancien fichier de test, créé par les Makefiles + build.out // Ancien fichier de test, créé par les Makefiles + *.[568ao] // fichiers objets, créés par les Makefiles + + DIR(.exe) // généré par go build + DIR.test(.exe) // généré par go test -c + MAINFILE(.exe) // généré par go build MAINFILE.go + +J'utilise généralement cette commande pour supprimer les fichiers avant de mettre à jour mon projet sur Github. +Ils sont utiles lors de tests en local, mais inutiles à avoir dans votre système de gestion de version. + +## go fmt + +Les développeurs C/C++ doivent avoir l'habitude des débats sur quelle convention d'écriture de code est la meilleure: le style K&R ou ANSI. +Avec Go, il n'existe qu'une convention à appliquer. Par exemple, les parenthèses ouvrantes doivent être en fin de ligne, et ne peuvent être sur une ligne toutes seules, +sinon vous aurez des erreurs à la compilation! + +Par chance, vous n'avez pas à retenir toutes ces règles. +`go fmt` le fait à votre place. exécutez simplement `go fmt .go` dans un terminal. +Je n'utilise pas souvent cette commande car les IDE l'exécutent normalement automatiquemennt lorsque vous sauvegardez un fichier. +Nous reviendrons sur les IDE dans la section suivante. + +On utilise généralement `gofmt -w` au lieu de `go fmt`. +Ce dernier ne modifie pas vos fichiers source après formattage. `gofmt -w src` formatte tout votre projet. + +## go get + +Cette commande récupère des paquets distants. Sont supportés BitBucket, Github, Google Code et Launchpad. +Il se passe en fait deux choses à l'exécution de cette commande. +En premier lieu, Go télécharge le code source, puis il exécute `go install`. +Avant d'utiliser cette commande, assurez-vous d'installer les outils nécessaires. + + BitBucket (Mercurial Git) + Github (git) + Google Code (Git, Mercurial, Subversion) + Launchpad (Bazaar) + +Pour utiliser cette commande, vous devez installer ces outils correctement. +N'oubliez pas de définir votre `$PATH`. +Notez que `go get` supporte également vos noms de domaine personnalisés. Exécutez `go help remote` pour en connaître les détails. + +## go install + +Cette commande compile tous les paquets et génére les fichiers, puis les déplace dans `$GOPATH/pkg` ou `$GOPATH/bin`. + +## go test + +Cette commande charge tous les fichiers qui ont pour nom `*_test.go` et génére les fichiers de test, puis affiche des informations similaires à celles-ci. + + ok archive/tar 0.011s + FAIL archive/zip 0.022s + ok compress/gzip 0.033s + ... + +Elle teste tous vos fichiers de test par défaut. Utilisez la commande `go help testflag` pour plus de détails. + +## go doc + +Beaucoup de personnes disent qu'il est inutile d'avoir une quelconque documentation tiers pour programmer en Go +(bien qu'en fait j'ai déjà développé [CHM](https://github.com/astaxie/godoc)). +Go a par défaut un outil très élaboré pour travailler avec la documentation. + +Alors comment rechercher des informations sur un paquet dans la documentation? Par exemple, si vous voulez plus d'informations sur le paquet `builtin`, +utilisez la commande `go doc builtin`. +De la même manière, utilisez la commande `go doc net/http` pour rechercher la documentation du paquet `http`. +Si vous voulez plus de détails spécifiques à une fonction, utilisez `godoc fmt Printf`, ou `godoc -src fmt Printf` pour voir le code source. + +Exécutez la commande `godoc -http=:8080`, puis ouvrez `127.0.0.1:8080` dans votre navigateur. Vous devriez voir un `golang.org` local. +Il peut non seulement afficher les informations des paquets standards, mais aussi les paquets de votre dossier `$GOPATH/pkg`. +C'est très bien pour ceux bloqués derrière la Grande Muraille de Chine. + +## Autres commandes + +Go fournit d'autres commandes que celles vues précédemment: + + go fix // mise à jour du code d'une version antérieure + // à go1 vers une version plus récente que go1 + go version // obtenir des informations sur votre version de Go + go env // afficher vos variables d'environnement Go + go list // lister tous les paquets installés + go run // compiler les fichiers temporaires et lancer l'application + +Les commandes que l'on a vues proposent également plus d'options que ce que nous avons vu. Vous pouvez utiliser `go help ` pour les visualiser. + +## Navigation + +- [Table des matières](preface.md) +- Section précédente: [$GOPATH et workspace](01.2.md) +- Section suivante: [Outils de développement Go](01.4.md) diff --git a/fr/01.4.md b/fr/01.4.md new file mode 100644 index 00000000..110b2dd5 --- /dev/null +++ b/fr/01.4.md @@ -0,0 +1,420 @@ +# Outils de développement Go + +Dans cette section, je vais vous présenter quelques IDE qui peuvent vous aider à coder plus efficacement, grâce à des fonctionnalités telles la complétion de code et le formattage automatiques. +Ils sont tous multi-plate-formes, les manipulations présentées ne devraient donc pas être très éloignées, même si vous n'utilisez pas le même système d'exploitation. + +## LiteIDE + +LiteIDE est un IDE léger et multi-plate-formes dédié uniquement au développement en Go, développé par visualfc. + +![](images/1.4.liteide.png?raw=true) + +Figure 1.4 Panneau principal de LiteIDE + +Fonctionnalités de LiteIDE: + +- Multi-plate-formes + - Windows + - Linux + - Mac OS +- Compilation croisée + - Gestion d'environnements de compilation multiples + - Support de la compilation croisée avec Go +- Standards en gestion de projet + - Documentation basée sur le $GOPATH + - Compilation basée sur le $GOPATH + - Index la documentation de l'API basée sur le $GOPATH +- Éditeur de code source Go + - Mise en forme du code + - Support complet de gocode + - Gestion de la documentation and et de l'index de l'API de Go + - Afficher l'expression d'un code via `F1` + - Naviguer entre déclaration de fonctions via `F2` + - Support Gdb + - Auto-formattage via `gofmt` +- Autres + - Multi-langues + - Système d'extensions + - Thèmes d'éditeur de texte + - Support dela syntaxe basé sur Kate + - Complétion intelligente basée en mode full-text + - Personnalisation des raccourcis + - Support Markdown + - Prévisualisation en temps réel + - CSS personnalisé + - Exportation en HTML et PDF + - Conversion et fusion en HTML et PDF + +### Installation de LiteIDE + +- Installer LiteIDE + - [Page de téléchargement](http://code.google.com/p/golangide) + - [Code source](https://github.com/visualfc/liteide) + + Vous devez installer Go en premier, puis télécharger la version adaptée à votre système d'exploitation. Décompressez le paquet pour ensuite l'exécuter directement. + +- Installer gocode + + Vous devez installer gocode pour utiliser la complétion intelligente + + go get -u github.com/nsf/gocode + +- Environment de compilation + + Changer de configuration de LiteIDE pour correspondre à votre système d'exploitation + Dans Windows avec la version 64-bit de Go, vous devriez utiliser win64 comme configuration de votre environnement dans la barre d'outils. + Ensuite, choisissez `option`, puis `LiteEnv` dans la liste de gauche et sélectionnez le fichier `win64.env` dans la liste de droite. + + GOROOT=c:\go + GOBIN= + GOARCH=amd64 + GOOS=windows + CGO_ENABLED=1 + + PATH=%GOBIN%;%GOROOT%\bin;%PATH% + 。。。 + + Modifiez `GOROOT=c:\go` par le chemin de votre installation Go, puis sauvegardez. Si vous avez MinGW64, ajoutez `c:\MinGW64\bin` au chemin de votre variable d'environnement pour le support de `cgo`. + + Pour Linux avec Go en version 64-bit, choisissez linux64 comme configuration de votre environnement dans la barre d'outils. + Ensuite, choisissez `opinion`, puis `LiteEnv` dans la liste de gauche et sélectionnez le fichier `linux64.env` dans la liste de droite. + + GOROOT=$HOME/go + GOBIN= + GOARCH=amd64 + GOOS=linux + CGO_ENABLED=1 + + PATH=$GOBIN:$GOROOT/bin:$PATH + 。。。 + + Modifiez `GOROOT=$HOME/go` par le chemin de votre installation Go. + +- $GOPATH + + $GOPATH est le chemin du dossier de vos projets. Ouvrez l'outil commande (`Ctrl+` dans LiteIDE), puis tapez `go help gopath` pour plus de détails. + C'est très simple de voir et modifier votre $GOPATH dans LiteIDE. Choisissez `View - Setup GOPATH` pour voir et modifier ces valeurs. + +## Sublime Text + +Dans cette partie je vais vous présenter Sublime Text 2 (Sublime tout court) + GoSublime + gocode + MarGo. + +- Complétion Intelligente + + ![](images/1.4.sublime1.png?raw=true) + + Figure 1.5 Complétion intelligente avec Sublime + +- Auto-formattage du code source +- Gestion de projet + + ![](images/1.4.sublime2.png?raw=true) + + Figure 1.6 Gestion de projet sous Sublime + +- Coloration syntaxique +- Version gratuite d'essai permanente sans limitation de fonctionnalités. Vous serez invité de temps en temps à acheter une licence, que vous pourrez refuser si vous voulez. + Bien sûr, si vous trouvez que Sublime augmente votre productivité et que vous l'appréciez vraiment, merci d'acheter une licence et de supporter son développement! + +Commencez par télécharger une version de [Sublime](http://www.sublimetext.com/) adaptées à votre système d'exploitation. + +1. Tapez `Ctrl+`, ouvrez l'invite de commandes et rentrez les commandes suivantes:. + + import urllib2,os; pf='Package Control.sublime-package'; ipp=sublime.installed_packages_path(); os.makedirs(ipp) if not os.path.exists(ipp) else None; urllib2.install_opener(urllib2.build_opener(urllib2.ProxyHandler())); open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read()); print 'Merci de redémarrer Sublime Text pour finaliser l'installation' + + Redémarrez Sublime text en fin d'installation. Vous devriez trouvez une option `Package Control` dans le menu "Preferences". + + ![](images/1.4.sublime3.png?raw=true) + + Figure 1.7 Gestion de paquet dans Sublime + +2. Pour installer GoSublime, SidebarEnhancements et Go Build, tapez `Ctrl+Shift+p` pour ouvrir Package Control, puis tapez `pcip` (raccourci pour "Package Control: Install Package"). + + ![](images/1.4.sublime4.png?raw=true) + + Figure 1.8 Installer des paquets sous Sublime + + Puis tapez "GoSublime", entrez OK pour installer le paquet, et répétez ces commandes pour installer SidebarEnhancements et Go Build. + À nouveau, redémarrez l'éditeur quand l'installation s'achève. + +3. Pour vérifier la réussite de l'installation, ouvrez Sublime, puis ouvrez le fichier `main.go` pour vérifier que la coloration syntaxique est correcte. +Tapez `import` pour voir si le prompt de la complétion de code s'affiche. Après avoir tapé `import "fmt"`, tapez `fmt.` juste après `import` pour voir si oui ou non la complétion intelligente de code +des fonctions a été activée avec succès. + + Si tout fonctionne correctement, vous êtes prêt. + + Sinon, vérifiez à nouveau votre $PATH. Ouvrez un terminal, tapez `gocode`. S'il ne s'exécute pas, votre $PATH n'est pas configuré correctement. + +## Vim + +Vim est un éditeur très populaire chez les programmeurs, qui est une évolution de son prédécesseur, Vi. +Il a des fonctionnalités de complétion intelligente, compilation et navigation entre les erreurs. + +![](images/1.4.vim.png?raw=true) + +Figure 1.8 Complétion intelligente pour Go sous Vim + +1. Coloration syntaxique sous Go + + cp -r $GOROOT/misc/vim/* ~/.vim/ + +2. Activer la coloration syntaxique + + filetype plugin indent on + syntax on + +3. Installer [gocode](https://github.com/nsf/gocode/) + + go get -u github.com/nsf/gocode + + gocode sera installé dans `$GOBIN` par défaut + +4. Configurer [gocode](https://github.com/nsf/gocode/) + + ~ cd $GOPATH/src/github.com/nsf/gocode/vim + ~ ./update.bash + ~ gocode set propose-builtins true + propose-builtins true + ~ gocode set lib-path "/home/border/gocode/pkg/linux_amd64" + lib-path "/home/border/gocode/pkg/linux_amd64" + ~ gocode set + propose-builtins true + lib-path "/home/border/gocode/pkg/linux_amd64" + + Explications sur la configuration de gocode: + + propose-builtins: active ou non la complétion automatique; faux par défaut. + + lib-path: gocode cherche uniquement les paquets dans `$GOPATH/pkg/$GOOS_$GOARCH` et `$GOROOT/pkg/$GOOS_$GOARCH`. + Ce paramètre peut-être utilisé pour ajouter des chemins additionnels. + +5. Félicitations! lancez `:e main.go` pour explorer le monde de Go! + +## Emacs + +Emacs est l'arme fatale. Ce n'est pas seulement un éditeur, mais aussi un IDE très puissant. + +![](images/1.4.emacs.png?raw=true) + +Figure 1.10 Panneau principal de l'éditeur Go d'Emacs + +1. Coloration syntaxique + + cp $GOROOT/misc/emacs/* ~/.emacs.d/ + +2. Installer [gocode](https://github.com/nsf/gocode/) + + go get -u github.com/nsf/gocode + + gocode sera installé dans `$GOBIN` par défaut + +3. Configurer [gocode](https://github.com/nsf/gocode/) + + ~ cd $GOPATH/src/github.com/nsf/gocode/vim + ~ ./update.bash + ~ gocode set propose-builtins true + propose-builtins true + ~ gocode set lib-path "/home/border/gocode/pkg/linux_amd64" + lib-path "/home/border/gocode/pkg/linux_amd64" + ~ gocode set + propose-builtins true + lib-path "/home/border/gocode/pkg/linux_amd64" + +4. Installer l'[Auto Completion](http://www.emacswiki.org/emacs/AutoComplete) + + Téléchargement et décompression + + ~ make install DIR=$HOME/.emacs.d/auto-complete + + Configurer ~/.emacs file + + ;;auto-complete + (require 'auto-complete-config) + (add-to-list 'ac-dictionary-directories "~/.emacs.d/auto-complete/ac-dict") + (ac-config-default) + (local-set-key (kbd "M-/") 'semantic-complete-analyze-inline) + (local-set-key "." 'semantic-complete-self-insert) + (local-set-key ">" 'semantic-complete-self-insert) + + Cliquez ce [lien](http://www.emacswiki.org/emacs/AutoComplete) pour plus de détails. + +5. Configurer .emacs + + ;; golang mode + (require 'go-mode-load) + (require 'go-autocomplete) + ;; speedbar + ;; (speedbar 1) + (speedbar-add-supported-extension ".go") + (add-hook + 'go-mode-hook + '(lambda () + ;; gocode + (auto-complete-mode 1) + (setq ac-sources '(ac-source-go)) + ;; Imenu & Speedbar + (setq imenu-generic-expression + '(("type" "^type *\\([^ \t\n\r\f]*\\)" 1) + ("func" "^func *\\(.*\\) {" 1))) + (imenu-add-to-menubar "Index") + ;; Outline mode + (make-local-variable 'outline-regexp) + (setq outline-regexp "//\\.\\|//[^\r\n\f][^\r\n\f]\\|pack\\|func\\|impo\\|cons\\|var.\\|type\\|\t\t*....") + (outline-minor-mode 1) + (local-set-key "\M-a" 'outline-previous-visible-heading) + (local-set-key "\M-e" 'outline-next-visible-heading) + ;; Menu bar + (require 'easymenu) + (defconst go-hooked-menu + '("Go tools" + ["Go run buffer" go t] + ["Go reformat buffer" go-fmt-buffer t] + ["Go check buffer" go-fix-buffer t])) + (easy-menu-define + go-added-menu + (current-local-map) + "Go tools" + go-hooked-menu) + + ;; Other + (setq show-trailing-whitespace t) + )) + ;; helper function + (defun go () + "run current buffer" + (interactive) + (compile (concat "go run " (buffer-file-name)))) + + ;; helper function + (defun go-fmt-buffer () + "run gofmt on current buffer" + (interactive) + (if buffer-read-only + (progn + (ding) + (message "Buffer is read only")) + (let ((p (line-number-at-pos)) + (filename (buffer-file-name)) + (old-max-mini-window-height max-mini-window-height)) + (show-all) + (if (get-buffer "*Go Reformat Errors*") + (progn + (delete-windows-on "*Go Reformat Errors*") + (kill-buffer "*Go Reformat Errors*"))) + (setq max-mini-window-height 1) + (if (= 0 (shell-command-on-region (point-min) (point-max) "gofmt" "*Go Reformat Output*" nil "*Go Reformat Errors*" t)) + (progn + (erase-buffer) + (insert-buffer-substring "*Go Reformat Output*") + (goto-char (point-min)) + (forward-line (1- p))) + (with-current-buffer "*Go Reformat Errors*" + (progn + (goto-char (point-min)) + (while (re-search-forward "" nil t) + (replace-match filename)) + (goto-char (point-min)) + (compilation-mode)))) + (setq max-mini-window-height old-max-mini-window-height) + (delete-windows-on "*Go Reformat Output*") + (kill-buffer "*Go Reformat Output*")))) + ;; helper function + (defun go-fix-buffer () + "run gofix on current buffer" + (interactive) + (show-all) + (shell-command-on-region (point-min) (point-max) "go tool fix -diff")) + +6. Félicitations,vous avez fini! Speedbar est fermé par défaut - décommentez `;;(speedbar 1)` pour activer cette fonctionnalité, ou vous pouvez l'utiliser via `M-x speedbar`. + +## Eclipse + +Eclipse est aussi un très bon outil de développement. Je vais vous montrer comment l'utiliser pour écrire des programmes Go. + +![](images/1.4.eclipse1.png?raw=true) + +Figure 1.1 Panneau principal d'Eclipse pour développer en Go + +1. Téléchargez et installez [Eclipse](http://www.eclipse.org/) +2. Téléchargez [goclipse](https://code.google.com/p/goclipse/) + + [Instructions d'installation](https://github.com/GoClipse/goclipse/blob/latest/documentation/Installation.md#installation) +3. Téléchargez gocode + + gocode sur Github. + + https://github.com/nsf/gocode + + Vous devez installer git sous Windows, généralement via [msysgit](http://msysgit.github.io/) + + Installer gocode en ligne de commandes + + go get -u github.com/nsf/gocode + + Vous pouvez l'installer depuis les sources si vous préférez. + . +4. Téléchargez et installez [MinGW](http://sourceforge.net/projects/mingw/files/MinGW/) +5. Configurez les extensions. + + Windows->Préférences->Go + + (1).Configurez le compilateur Go + + ![](images/1.4.eclipse2.png?raw=true) + + Figure 1.12 Paramètres Go dans Eclipse + + (2).Configurez gocode(optionnel), paramètrez le chemin gocode vers l'emplacement de gocode.exe. + + ![](images/1.4.eclipse3.png?raw=true) + + Figure 1.13 Paramètres gocode + + (3).Configurez gdb(optionnell), paramètrez le chemin de gdb vers l'emplacement de gdb.exe. + + ![](images/1.4.eclipse4.png?raw=true) + + Figure 1.14 Paramètre gdb + +6. Vérifiez l'installation + + Créez un nouveau projet Go et un fichier hello.go comme suit. + + ![](images/1.4.eclipse5.png?raw=true) + + Figure 1.15 Créez un nouveau projet et fichier. + + Testez l'installation comme suit (Vous avez besoin de taper la commande dans la console d'Eclipse). + + ![](images/1.4.eclipse6.png?raw=true) + + Figure 1.16 Testez Go depuis Eclipse + +## IntelliJ IDEA + +Les développeurs Java sont familiers de cet IDE. Il supporte la coloration syntaxique et la complétion intelligente de code sous Go, via une extension. + +1. Téléchargez IDEA, il n'y a aucune différence entre les éditions Ultimate et Community + + ![](images/1.4.idea1.png?raw=true) + +2. Installer l'extension Go. Choisissez `File - Setting - Plugins`, puis `Browser repo`. + + ![](images/1.4.idea3.png?raw=true) + +3. Cherchez `golang`, double-cliquez `download and install` et patientez jusqu'à la fin du téléchargement. + + ![](images/1.4.idea4.png?raw=true) + + Cliquez `Apply`, puis redémarrez. +4. Maintenant vous pouvez créer un projet Go. + + ![](images/1.4.idea5.png?raw=true) + + Entrez le chemin de votre sdk Go dans l'étape suivante - qui correspond à votre $GOROOT. + +## Navigation + +- [Table des matières](preface.md) +- Section précédente: [Commandes Go](01.3.md) +- Section suivante: [Résumé](01.5.md) diff --git a/fr/01.5.md b/fr/01.5.md new file mode 100644 index 00000000..6b56bb12 --- /dev/null +++ b/fr/01.5.md @@ -0,0 +1,14 @@ +# 1.5 Résumé + +Dans ce chapitre, nous avons abordé l'installation de Go suivant trois méthodes différentes comprenant celle par le code source, via le paquet standard +et des outils tierce. +Ensuite, nous avons vu comment configurer l'environnement de développement Go, couvrant principalement la configuration de votre `$GOPATH`. +Après cela, nous avons présenté certaines méthodes de compilation et de déploiement de programmes de Go. Nous avons ensuite couvert des commandes Go, +incluant la compilation, l'installation, le formatage et les tests. Enfin, il existe de nombreux outils puissants pour développer des programmes +Go tels que LiteIDE, Sublime Text, Vim, Emacs, Eclipse, IntelliJ IDEA, etc. Vous pouvez choisir celui de votre préférence pour découvrir le monde du langage Go. + +## Navigation + +- [Table des matières](preface.md) +- Section précédente: [Outils de développement Go](01.4.md) +- Chapitre suivant: [Bases du langage Go](02.0.md) diff --git a/fr/README.md b/fr/README.md new file mode 100644 index 00000000..d50bac74 --- /dev/null +++ b/fr/README.md @@ -0,0 +1,40 @@ +***Développer une application Web en Go*** +========================================== + +### But + +Parce que je suis intéressé par le développement d'applications Web, j'ai écrit ce livre sur mon temps libre en mettant librement à disposition son code source. +Cela ne signifie pas que je sois très compétent en développement d'applications web. Je tiens simplement à partager ce que j'ai fait avec Go +dans la création d'applications web. + +* Pour ceux d'entre vous qui sont développeurs PHP/Python/Ruby, vous apprendrez comment développer une application web avec Go. +* Pour ceux d'entre vous qui sont développeurs C/C++, vous saurez comment fonctionne une application web. + +Je crois que le but de tout apprentissage est de finir par partager ce savoir avec les autres. +La chose que j'apprécie le plus dans la vie est de partager tout ce que j'ai appris avec un maximum de monde. + +# Donation + +AliPay(Chine): alipay + +International: [donation](http://beego.me/donate) + +## Communauté +Groupe QQ:386056972 + +BBS:[http://golanghome.com/](http://golanghome.com/) + +### Remerciements + + - [April Citizen](https://plus.google.com/110445767383269817959) (relecture de code) + - [Hong Ruiqi](https://github.com/hongruiqi) (relecture de code) + - [BianJiang](https://github.com/border) (écriture des configurations sur Vim et Emacs pour le développement Go) + - [Oling Cat](https://github.com/OlingCat) (relecture de code) + - [Wenlei Wu](mailto:spadesacn@gmail.com) (a participé à certaines images) + - [Polaris](https://github.com/polaris1119) (relecture complète du livre) + - [Rain Trail](https://github.com/qyuhen) (relecture des chapitres 2 et 3) + +### Licence + +Ce livre est sous licence [CC BY-SA 3.0](http://creativecommons.org/licenses/by-sa/3.0/fr/), +Le code source est sous licence [BSD 3-Clause](https://github.com/astaxie/build-web-application-with-golang/blob/master/LICENSE.md), sauf indication contraire. diff --git a/fr/SUMMARY.md b/fr/SUMMARY.md new file mode 100644 index 00000000..b5eda6a8 --- /dev/null +++ b/fr/SUMMARY.md @@ -0,0 +1,8 @@ +* [Configuration de votre environnement de développement Go](01.0.md) + * [Installation](01.1.md) + * [$GOPATH et workspace](01.2.md) + * [Commandes Go](01.3.md) + * [Outils de développement Go](01.4.md) + * [Résumé](01.5.md) +* [Références](ref.md) +* [Préface](preface.md) diff --git a/fr/images/1.1.mac.png b/fr/images/1.1.mac.png new file mode 100644 index 00000000..ad2ceed6 Binary files /dev/null and b/fr/images/1.1.mac.png differ diff --git a/fr/images/1.3.go.png b/fr/images/1.3.go.png new file mode 100644 index 00000000..8155b2d5 Binary files /dev/null and b/fr/images/1.3.go.png differ diff --git a/fr/images/1.4.eclipse1.png b/fr/images/1.4.eclipse1.png new file mode 100644 index 00000000..5b2f10d8 Binary files /dev/null and b/fr/images/1.4.eclipse1.png differ diff --git a/fr/images/1.4.eclipse2.png b/fr/images/1.4.eclipse2.png new file mode 100644 index 00000000..55931f33 Binary files /dev/null and b/fr/images/1.4.eclipse2.png differ diff --git a/fr/images/1.4.eclipse3.png b/fr/images/1.4.eclipse3.png new file mode 100644 index 00000000..3c7bd634 Binary files /dev/null and b/fr/images/1.4.eclipse3.png differ diff --git a/fr/images/1.4.eclipse4.png b/fr/images/1.4.eclipse4.png new file mode 100644 index 00000000..d4ee77af Binary files /dev/null and b/fr/images/1.4.eclipse4.png differ diff --git a/fr/images/1.4.eclipse5.png b/fr/images/1.4.eclipse5.png new file mode 100644 index 00000000..8a89555d Binary files /dev/null and b/fr/images/1.4.eclipse5.png differ diff --git a/fr/images/1.4.eclipse6.png b/fr/images/1.4.eclipse6.png new file mode 100644 index 00000000..7771ec2e Binary files /dev/null and b/fr/images/1.4.eclipse6.png differ diff --git a/fr/images/1.4.emacs.png b/fr/images/1.4.emacs.png new file mode 100644 index 00000000..3dd6845f Binary files /dev/null and b/fr/images/1.4.emacs.png differ diff --git a/fr/images/1.4.idea1.png b/fr/images/1.4.idea1.png new file mode 100644 index 00000000..87d2e51e Binary files /dev/null and b/fr/images/1.4.idea1.png differ diff --git a/fr/images/1.4.idea3.png b/fr/images/1.4.idea3.png new file mode 100644 index 00000000..574e1d74 Binary files /dev/null and b/fr/images/1.4.idea3.png differ diff --git a/fr/images/1.4.idea4.png b/fr/images/1.4.idea4.png new file mode 100644 index 00000000..f6e5138d Binary files /dev/null and b/fr/images/1.4.idea4.png differ diff --git a/fr/images/1.4.idea5.png b/fr/images/1.4.idea5.png new file mode 100644 index 00000000..7784a611 Binary files /dev/null and b/fr/images/1.4.idea5.png differ diff --git a/fr/images/1.4.liteide.png b/fr/images/1.4.liteide.png new file mode 100644 index 00000000..f28d755e Binary files /dev/null and b/fr/images/1.4.liteide.png differ diff --git a/fr/images/1.4.sublime1.png b/fr/images/1.4.sublime1.png new file mode 100644 index 00000000..60f2b3db Binary files /dev/null and b/fr/images/1.4.sublime1.png differ diff --git a/fr/images/1.4.sublime2.png b/fr/images/1.4.sublime2.png new file mode 100644 index 00000000..a888636f Binary files /dev/null and b/fr/images/1.4.sublime2.png differ diff --git a/fr/images/1.4.sublime3.png b/fr/images/1.4.sublime3.png new file mode 100644 index 00000000..8b2eb3dc Binary files /dev/null and b/fr/images/1.4.sublime3.png differ diff --git a/fr/images/1.4.sublime4.png b/fr/images/1.4.sublime4.png new file mode 100644 index 00000000..b0fef624 Binary files /dev/null and b/fr/images/1.4.sublime4.png differ diff --git a/fr/images/1.4.vim.png b/fr/images/1.4.vim.png new file mode 100644 index 00000000..27a15c05 Binary files /dev/null and b/fr/images/1.4.vim.png differ diff --git a/fr/images/navi1.png b/fr/images/navi1.png new file mode 100644 index 00000000..92a7669e Binary files /dev/null and b/fr/images/navi1.png differ diff --git a/fr/preface.md b/fr/preface.md new file mode 100644 index 00000000..f1e8add7 --- /dev/null +++ b/fr/preface.md @@ -0,0 +1,7 @@ +- 1.[Configuration de votre environnement de développement Go](01.0.md) + - 1.1. [Installation](01.1.md) + - 1.2. [$GOPATH et workspace](01.2.md) + - 1.3. [Commandes Go](01.3.md) + - 1.4. [Outils de développement Go](01.4.md) + - 1.5. [Résumé](01.5.md) +- Appendice A [Références](ref.md) diff --git a/fr/ref.md b/fr/ref.md new file mode 100644 index 00000000..ce3d6caa --- /dev/null +++ b/fr/ref.md @@ -0,0 +1,14 @@ +# Appendice A Références + +Ce livre est un condensé de mon expérience avec Go, certains contenus proviennent de blogs ou sites d'autres gophers. +Vous pouvez les remercier! + +1. [golang blog](http://blog.golang.org) +2. [Russ Cox blog](http://research.swtch.com/) +3. [go book](http://go-book.appsp0t.com/) +4. [golangtutorials](http://golangtutorials.blogspot.com) +5. [轩脉刃de刀光剑影](http://www.cnblogs.com/yjf512/) +6. [Go Programming Language](http://golang.org/doc/) +7. [Network programming with Go](http://jan.newmarch.name/go/) +8. [setup-the-rails-application-for-internationalization](http://guides.rubyonrails.org/i18n.html#setup-the-rails-application-for-internationalization) +9. [The Cross-Site Scripting (XSS) FAQ](http://www.cgisecurity.com/xss-faq.html) diff --git a/ja/01.0.md b/ja/01.0.md index 346e83ef..7a0b4e6d 100644 --- a/ja/01.0.md +++ b/ja/01.0.md @@ -2,17 +2,17 @@ Goの世界へようこそ、さっそく初めてみましょう! -Goは新しい言語です、並列処理、ガベージコレクションを備え、軽快にプログラムできる言語です。以下のような特徴を持っています: +Goは新しい言語です、並列処理、ガベージコレクションを備え、軽快にコンパイルできる言語です。以下のような特徴を持っています: -- 一台のコンピュータ上であっという間に大型のGoプログラムを作り出すことができます。 -- Goはソフトウェアの構造にモデルを提供します。分析をより簡単にこなせ、Cスタイルの頭にありがちなファイルとライブラリのincludeの大部分を省くことができます。 -- Goは静的型付け言語です。型には階層がありません。このためユーザは型の定義の関係に時間をとられることなく、典型的なオブジェクト指向言語よりももっとライトに感じるくらいです。 -- Goは完全にガベージコレクションタイプの言語です。また、並列処理とネットワークを基本的にサポートしています。 +- 一台のコンピュータ上であっという間に大型のGoプログラムをコンパイルすることができます。 +- Goはソフトウェアの構造にモデルを与えます。分析をより簡単にこなすことができ、ファイルやライブラリのincludeといったCスタイルの書き出しにありがちな部分を大幅に省くことができます。 +- Goは静的型付け言語です。型に階層の概念が無いのでユーザはその関係に気をとられることもなく、典型的なオブジェクト指向言語よりももっとライトに感じるくらいです。 +- Goは完全なガベージコレクションタイプの言語です。また、基本的な並列処理とネットワークをサポートしています。 - Goはマルチプロセッサ対応のソフトウェアを作成できるようデザインされています。 -Goはコンパイラ型言語の一種です。インタプリタ型言語の軽い身のこなしと動的型付け言語の開発効率、それに静的型付け言語の安全性を兼ね備えています。また、モダンにネットワークとマルチプロセッサもサポートしています。これらの目標を達成するには、解決しなければならない言語上の問題がいくつかあります:表現力豊かだけれども軽いシステム、並列処理とガベージコレクション、厳格な依存定義などです。これらはライブラリやツール無しにはうまくいきません。Goもその要望に応えます。 +Goはコンパイラ型言語の一種です。インタプリタ型言語の軽い身のこなしと動的型付け言語の開発効率、それに静的型付け言語の安全性を兼ね備えています。また、今風のネットワークとマルチプロセッサもサポートしています。これらを実現する為には、表現力豊かで且つ軽いクラスシステム・並列処理とガベージコレクション・厳格な依存定義などを言語レベルで満たしていなければなりません。どれもライブラリやツールでは解決しきれないものです。Goはその要望に応えます。 -この章ではGoのインストール方法と設定について述べます。 +この章ではGoのインストール方法と設定についてご紹介します。 ## 目次 diff --git a/ja/01.1.md b/ja/01.1.md index ef12dda2..4f09c48f 100644 --- a/ja/01.1.md +++ b/ja/01.1.md @@ -1,26 +1,26 @@ # 1.1 Goのインストール ## 3つのインストール方法 -Goにはいくつものインストール方法があります。どれでも好きなのを選んでかまいません。ここでは3つのよくあるインストール方法をご紹介しましょう: +Goにはいくつものインストール方法があります。どれでも好きなのを選んでかまいません。ここでは3つのよくあるインストール方法をご紹介します: - ソースコードのインストール:標準的なインストール方法です。Unix系システムをよく使うユーザ、特に開発者にとってはお馴染みの方法です。 - 標準パッケージのインストール:Goは便利なインストールパッケージを用意しています。Windows, Linux, Macなどのシステムをサポートしています。初心者にはうってつけでしょう。システムのbit数に対応したインストールパッケージをダウンロードして、"Next"をたどるだけでインストールできます。 - サードパーティツールによるインストール:現在便利なサードパーティパッケージも多くあります。たとえばUbuntuのapt-get、Macのhomebrewなどです。これらのシステムに慣れたユーザにはぴったりのインストール方法です。 -最後に同じシステムの中で異なるバージョンのGoをインストールする場合は、[GVM](https://github.com/moovweb/gvm)が参考になります。どうすればよいか分からない場合一番うまくできます。 +最後に同じシステムの中で異なるバージョンのGoをインストールする場合は、[GVM](https://github.com/moovweb/gvm)が参考になります。どうすればよいか分からない場合一番うまくやれます。 ## Goソースコードのインストール -Goソースコードの中で、いくつかの部分はPlan 9 CとAT&Tコンパイラを使っています。そのため、もしあなたがソースコードをインストールしたい場合は、Cのコンパイルツールをインストールしておく必要があります。 +GoのソースコードにはPlan 9 CとAT&Tコンパイラを使って書かれている部分があります。もしソースコードからインストールしたい場合は、あらかじめCのコンパイルツールをインストールしておく必要があります。 -Macシステムでは、Xcodeに適切なコンパイラが含まれています。 +Macでは、Xcodeに適切なコンパイラが含まれています。 -Unixシステムでは、gccなどのツールをインストールする必要があります。例えばUbuntuシステムではターミナルで`sudo apt-get install gcc libc6-dev`を実行することでコンパイラをインストールすることができます。 +Unixでは、gccなどのツールをインストールする必要があります。例えばUbuntuではターミナルで`sudo apt-get install gcc libc6-dev`を実行することでコンパイラをインストールすることができます。 -Windowsシステムでは、MinGWをインストールする必要があります。その後MinGWでgccをインストールして、適切な環境変数を設定します。 +Windowsでは、MinGWをインストールする必要があります。その後MinGWでgccをインストールして、適切な環境変数を設定します。 -Goは[Mercurial][hg]を使ってバージョン管理を行います、まずMercurialをインストールしなければ、ダウンロードできません。もしMercurialがインストールされているのであれば、以下のコードを実行します: +Goは[Mercurial][hg]を使ってバージョン管理を行っています、まずMercurialをインストールし、その後でダウンロードできます。もしMercurialがインストールされているのであれば、以下のコードを実行します: -もしGoのインストールディレクトリが`$GO_INSTALL_DIR`だったとすると +もしGoのインストールディレクトリが`$GO_INSTALL_DIR`だった場合 hg clone -u release https://code.google.com/p/go cd go/src @@ -28,7 +28,7 @@ Goは[Mercurial][hg]を使ってバージョン管理を行います、まずMer all.bashを実行後"ALL TESTS PASSED"が表示されると、インストール成功です。 -上記はUnixスタイルのコマンドです、Windowsではインストール方法は似ており、all.batを実行するだけです。コンパイラはMinGWのgccを使います。 +上記はUnixスタイルのコマンドです、Windowsもインストール方法は似ており、all.batを実行するだけです。コンパイラはMinGWのgccを使います。 その後環境変数をいくつか設定します、 @@ -40,25 +40,25 @@ all.bashを実行後"ALL TESTS PASSED"が表示されると、インストール ![](images/1.1.mac.png?raw=true) -図1.1 ソースコードインストール後Goコマンドを実行するの図 +図1.1 ソースコードインストール後Goコマンドを実行 -もしGoのUsage情報が現れたら、Goはインストールが成功しています:もしこのコマンドが存在しない場合は、自分のPATH環境変数のなかにGoのインストールディレクトリが含まれているか確認してください。 +GoのUsage情報が表示されれば、Goのインストールは成功です:もしこのコマンドが存在しない場合は、PATH環境変数のなかにGoのインストールディレクトリが含まれているか確認してください。 ## Go標準パッケージのインストール -Goはさまざまなプラットホームでインストールパッケージを提供しています、これらのパッケージはデフォルトで以下のディレクトリにインストールします:/usr/local/go(Windowsシステム:c:\Go)。当然これらのインストール場所を変更することもできます、ただし変更後はあなたの環境変数を以下のように設定する必要があります: +Goはさまざまなプラットホームでインストールパッケージを提供しています、これらのパッケージはデフォルトで以下のディレクトリにインストールします:/usr/local/go(Windows:c:\Go)。当然これらのインストール場所を変更することもできます、ただし変更後はあなたの環境変数を以下のように設定する必要があります: export GOROOT=$HOME/go export PATH=$PATH:$GOROOT/bin -### 自分の操作しているシステムが32bitか64bitか判断する方法。 +### 自分の操作しているシステムが32bitか64bitか判断する方法 -Goインストールの次はシステムのbit数の判断ですので、この章では先に自分のシステムの種類を確認しましょう。 +Goのインストールにはオペレーティングシステムのbit数を判断する必要があるので、この章では先に自分のシステムの種類を確認しましょう。 -WindowsシステムのユーザはWin+Rを押してcmdを実行してください。`systeminfo`と入力してエンターキーを押します。少しするとシステムの情報が現れます。"システムの種類"の一行に、"x64-based PC"と表示されていれば、64bitシステムです。もし"X86-based PC"とあれば、32bitシステムです。 +WindowsのユーザはWin+Rを押してcmdを実行してください。`systeminfo`と入力してエンターキーを押します。しばらくするとシステムの情報が表示されます。"システムの種類"の一行に"x64-based PC"と表示されていれば64bitシステムです。もし"X86-based PC"とあれば、32bitシステムです。 -Macユーザは直接64bit版を使用することをおすすめします。なぜなら、GoがサポートしているMac OS Xのバージョンはすでに32bitプロセッサをサポートしていないからです。 +Macユーザは直接64bit版を使用することをおすすめします。GoがサポートしているMac OS Xのバージョンは、すでに32bitプロセッサをサポートしていないためです。 LinuxユーザはTerminalで`arch`(すなわち、`uname -a`)を実行することでシステムの情報を確かめることができます。 @@ -72,17 +72,17 @@ LinuxユーザはTerminalで`arch`(すなわち、`uname -a`)を実行するこ ### Mac インストール -[ダウンロードURL][downlink]に接続し、32bitシステムはgo1.0.3.darwin-386.pkgをダウンロードします。64bitシステムであればgo1.0.3.darwin-amd64.pkgをダウンロードします。ファイルをダブルクリックし、すべてデフォルトで「次へ」ボタンをクリックします。これでgoはあなたのシステムにインストールされました。デフォルトでPATHの中に適切な`~/go/bin`が追加されています。このとき端末を開き、`go`と入力します。 +[ダウンロードURL][downlink]にアクセスし、32bitシステムはgo1.0.3.darwin-386.pkgをダウンロードします。64bitシステムであればgo1.0.3.darwin-amd64.pkgをダウンロードします。ファイルをダブルクリックし、すべてデフォルトで「次へ」ボタンをクリックします。これでgoはあなたのシステムにインストールされました。デフォルトでPATHの中に適切な`~/go/bin`が追加されています。端末を開いて`go`と入力します。 -インストール成功の画像があらわれるとインストール成功です。 +インストール成功の画像が表示されればインストール成功です。 -もしgoのUsage情報が現れた場合は、goはすでにインストールされています。もしこのコマンドが存在しないと出てきた場合は、自分のPATH環境変数の中にgoのインストールディレクトリが含まれているか確認してください。 +もしgoのUsage情報が表示した場合は、goはすでにインストールされています。もしこのコマンドが存在しないと表示した場合は、自分のPATH環境変数の中にgoのインストールディレクトリが含まれているか確認してください。 ### Linux インストール -[ダウンロードURL][downlink]に接続し、32bitシステムはgo1.0.3.linux-386.tar.gzをダウンロードします。64bitシステムであればgo1.0.3.linux-amd64.tar.gzをダウンロードします。 +[ダウンロードURL][downlink]にアクセスし、32bitシステムであればgo1.0.3.linux-386.tar.gzを、64bitシステムであればgo1.0.3.linux-amd64.tar.gzをダウンロードします。 -今後はGoがインストールされたディレクトリを`$GO_INSTALL_DIR`と仮定します。 +以下ではGoがインストールされたディレクトリを`$GO_INSTALL_DIR`と仮定します。 `tar.gz`をインストールディレクトリに解凍します:`tar zxvf go1.0.3.linux-amd64.tar.gz -C $GO_INSTALL_DIR` @@ -92,19 +92,19 @@ PATHを設定します。`export PATH=$PATH:$GO_INSTALL_DIR/go/bin` ![](images/1.1.linux.png?raw=true) -図1.2 Linuxシステムでインストールに成功したあとgoを実行して表示される情報 +図1.2 Linuxシステムでインストールに成功したあとgoを実行した時に表示する情報 -もしgoのUsage情報が現れた場合は、goはすでにインストールされています。もしこのコマンドが存在しないと出てきた場合は、自分のPATH環境変数の中にgoのインストールディレクトリが含まれているか確認してください。 +もしgoのUsage情報が表示された場合は、goはすでにインストールされています。もしこのコマンドが存在しないと出てきた場合は、自分のPATH環境変数の中にgoのインストールディレクトリが含まれているか確認してください。 ### Windows インストール ### -[Google Code ダウンロードページ][downlink]に接続し、32bit の場合は名前に windows-386 を含む msi パッケージをダウンロードします。64bit であれば名前に windows-amd64 を含むものをダウンロードします。ダウンロード後実行しますが、デフォルトのインストールフォルダである C:\Go\を変更してはいけません。他の場所にインストールしてしまうと、あなたが書いた Go コードが実行できなくなってしまうかもしれません。インストールが終わるとデフォルトで環境変数 Path に Go のインストールフォルダの下にある bin フォルダ `C:\Go\bin\` が追加され、Go のインストールフォルダである `C:\Go\` の値が環境変数 GOROOT に追加されます。 +[Google Code ダウンロードページ][downlink]にアクセスし、32bit の場合は名前に windows-386 を含む msi パッケージを、64bit であれば名前に windows-amd64 を含むものをダウンロードします。ダウンロード後実行しますが、デフォルトのインストールフォルダである C:\Go\を変更してはいけません。他の場所にインストールしてしまうと、あなたが書いた Go コードが実行できなくなってしまうかもしれません。インストールが終わるとデフォルトで環境変数 Path に Go のインストールフォルダの下にある bin フォルダ `C:\Go\bin\` が追加され、Go のインストールフォルダである `C:\Go\` の値が環境変数 GOROOT に追加されます。 ** インストールが成功しているか確認する ** -「ファイル名を指定して実行」に `cmd` を入力することでコマンドラインツールを開きます。プロンプトで`go`と入力することで Usage 情報が確認できるか確かめることができます。`cd %GOROOT%` を入力すると、Go のインストールフォルダに入れるか確認できます。どちらも成功していれば、インストールに成功しています。 +「ファイル名を指定して実行」に `cmd` を入力し、コマンドラインツールを開きます。プロンプトで`go`と入力することで Usage 情報が確認できるか確かめることができます。`cd %GOROOT%` を入力すると、Go のインストールフォルダに入れるか確認できます。どちらも成功していれば、インストールに成功しています。 -インストールに成功していなければ、環境変数 Path と GOROOT の値を確認してください。もし存在しなければアンインストールの上再インストールし、存在していればコンピュータを再起動し、上の手順を再度お試しください。 +インストールに成功していなければ、環境変数 Path と GOROOT の値を確認してください。もし存在しなければアンインストールの上再インストールし、存在していればコンピュータを再起動し、上の手順を再度試してください。 ## サードパーティツールのインストール @@ -121,7 +121,7 @@ gvmはサードパーティが開発したGoのバージョン管理ツールで 下のコマンドで、毎回gvm useをコールする手間を省くことができます: gvm use go1.1 --default -上のコマンドを実行したあと、GOPATH、GOROOTなどの環境変数は自動的に設定されます。これで、直接利用することができます。 +上のコマンドを実行したあと、GOPATH、GOROOTなどの環境変数が自動的に設定されます。これで、直接利用することができます。 ### apt-get Ubuntuは現在最も多く利用されているLinuxデスクトップシステムです。`apt-get`コマンドでソフトウェア・パッケージを管理します。下のコマンドでGoをインストールすることができます、今後のため`git`と`mercurial`もインストールしておくべきでしょう: @@ -132,7 +132,7 @@ Ubuntuは現在最も多く利用されているLinuxデスクトップシステ sudo apt-get install golang-stable git-core mercurial ### homebrew -homebrewはMacシステムで現在最も使用されているソフトウェア管理ツールです。現在Goをサポートしており、以下のコマンドでGoを直接インストールすることができます。今後のため`git`と`mercurial`もインストールしておくべきでしょう: +homebrewはMacで現在最も使用されているソフトウェア管理ツールです。現在Goをサポートしており、以下のコマンドでGoを直接インストールすることができます。今後のため`git`と`mercurial`もインストールしておくべきでしょう: brew update && brew upgrade brew install go diff --git a/ja/04.0.md b/ja/04.0.md index 328d854f..4476940e 100644 --- a/ja/04.0.md +++ b/ja/04.0.md @@ -1,6 +1,6 @@ # 4 フォーム -フォームは我々が普段Webアプリケーションを書く時によく使うツールです。フォームを通して便利にユーザにサーバとデータをやり取りさせることができます。以前にWeb開発をしたことのあるユーザにとってはフォームはとてもお馴染みのものです。しかしC/C++のプログラマからすると、少々ばかり門外漢かもしれません。フォームとは一体何でしょうか? +フォームは普段Webアプリケーションを書く時によく使われるツールです。フォームを通して便利にユーザにサーバとデータをやり取りさせることができます。以前にWeb開発をしたことのあるユーザにとってはフォームはとてもお馴染みのものです。しかしC/C++のプログラマからすると少々取っ付きにくいかもしれません。フォームとは一体何でしょうか? フォームは表の要素を含むエリアです。フォームの要素はユーザがフォームの中で(例えば、テキストフィールド、コンボボックス、チェックボックス、セレクトボックス等です。)情報を入力する要素です。フォームはフォームタグ(\)で定義します。 @@ -10,11 +10,11 @@ ... -Goではformの処理にすでにとても簡単な方法が用意されています。Requestの中にformを専門に処理するものがあります。とても簡単にWeb開発に利用できるものです。4.1節の中でGoがどのようにフォームの入力を処理するかご説明します。いかなるユーザの入力も信用はできないので、これらの入力に対しバリデーションを行う必要があります。4.2節ではどのように普通のバリデーションを行うか、細かいデモンストレーションを行います。 +Goではformの処理に簡単な方法が既に用意されています。Requestの中にformを専門に処理するものがあり、簡単にWeb開発に利用できます。4.1節の中でGoがどのようにフォームの入力を処理するかご説明します。いかなるユーザの入力も信用はできないので、これらの入力に対し検証を行う必要があります。4.2節では一般的にどのように検証を行うか、細かいデモンストレーションを行います。 -HTTPプロトコルはステートレスなプロトコルです。ではどのようにして一人のユーザを同定するのでしょうか?また、フォームが複数回送信されてしまわないように保証するにはどうするのでしょうか?4.3と4.4節ではcookie(cookieはクライアントに保存される情報です。handlerとサーバを通る度にやり取りされるデータです。)等をより詳しくご紹介します。 +HTTPプロトコルはステートレスなプロトコルです。ではどのようにして一人のユーザを同定するのでしょうか?また、フォームが複数回送信されてしまわないように保証するにはどうするのでしょうか?4.3と4.4節ではcookie(cookieはクライアントに保存される情報です。HTTP Headerを通してサーバーとやり取りされます)等をより詳しくご紹介します。 -フォームにはもうひとつ、ファイルをアップロードできるという大きな機能があります。Goはファイルのアップロードをどのように処理しているのでしょうか?大きなファイルをアップロードする際効率よく処理するにはどうすればよいでしょうか?4.5節ではGoによるファイルのアップロード処理の知識を一緒に勉強します。 +フォームにはもうひとつファイルをアップロードできるという大きな機能があります。Goはファイルのアップロードをどのように処理しているのでしょうか?大きなファイルをアップロードする際効率よく処理するにはどうすればよいでしょうか?4.5節ではGoによるファイルのアップロード処理の知識を一緒に勉強します。 ## 目次 ![](images/navi4.png?raw=true) diff --git a/ja/04.1.md b/ja/04.1.md index 53c62c83..a68f3fb3 100644 --- a/ja/04.1.md +++ b/ja/04.1.md @@ -1,6 +1,6 @@ # 4.1 フォームの入力を処理する -まずフォームによる送信の例を見てみましょう。以下のようなフォームの内容があるとします。login.gtplというファイルを新規作成します。(新しくディレクトリを作ってその中に入れてください) +まずフォームによる送信の例を見てみましょう。以下のようなフォームのコンテンツがあるとします。login.gtplというファイルを新規作成します。(新しくディレクトリを作ってその中に入れてください) @@ -15,9 +15,9 @@ -上で送信されるフォームはサーバの`/login`に渡ります。ユーザが情報を入力し、ログインをクリックした後、サーバのルーティングの`login`にリダイレクトします。まずはこの送信が何のメソッドによるものか判断する必要があります。POSTでしょうかGETでしょうか? +上で送信されるフォームはサーバの`/login`に渡されます。ユーザが情報を入力しログインをクリックした後、サーバのルーティングの`login`にリダイレクトします。まずはこの送信が何のメソッドによるものか判断する必要があります。POSTでしょうかGETでしょうか? -httpパッケージではとても簡単な方法で取得することができます。前のwebの例を基礎にloginページのformデータをどのように処理するか見てみましょう。 +httpパッケージにはそれを取得するとても簡単な方法があります。前のwebの例を基礎にloginページのformデータをどのように処理するか見てみましょう。 package main @@ -66,7 +66,7 @@ httpパッケージではとても簡単な方法で取得することができ } -上のコードにおいてリクエストを取得するメソッドは`r.Method`を通じて完了することがわかります。これは文字列型の変数です。GET, POST, PUT等のmethod情報を返します。 +上のコードにおいてリクエストのメソッドを取得するには`r.Method`だけで済むことがわかります。これは文字列型の変数です。GET, POST, PUT等のmethod情報を返します。 login関数では`r.Method`に従ってログイン画面を表示するのかログインロジックを処理するのかが判断されます。GETメソッドによるリクエストの場合はログイン画面を表示し、その他のメソッドによるリクエストではログインロジックを処理します。例えばデータベースを検索したり、ログイン情報を検証したりといった事です。 @@ -76,7 +76,7 @@ login関数では`r.Method`に従ってログイン画面を表示するのか 図4.1 ユーザログイン画面 -我々がユーザ名とパスワードを入力しても、サーバは何も出力しません。なぜでしょうか?デフォルトでは、Handlerの中ではformの内容を自動的に解析しないからです。必ず明示的に`r.ParseForm()`をコールした後でなければ、このフォームのデータに対して操作を行うことはできません。コードを少し修正して、`fmt.Println("username:", r.Form["username"])`の前に`r.ParseForm()`という一行を追加してください。再コンパイルしてもう一度入力、送信してみると、今度はサーバがあなたの入力したユーザ名とパスワードを出力するはずです。 +我々がユーザ名とパスワードを入力してもサーバは何も出力しません。なぜでしょうか?デフォルトではHandlerの中ではformの内容を自動的に解析しないからです。必ず明示的に`r.ParseForm()`をコールした後でなければ、このフォームのデータに対して操作を行うことはできません。コードを少し修正して、`fmt.Println("username:", r.Form["username"])`の前に`r.ParseForm()`という一行を追加してください。再コンパイルしてもう一度入力、送信してみると、今度はサーバがあなたの入力したユーザ名とパスワードを出力するはずです。 `r.Form`では全てのリクエストのデータが含まれています。例えばURLの中のquery-string、POSTのデータ、PUTのデータなどです。URLのquery-stringフィールドとPOSTが衝突する場合はsliceに保存されます。これには複数の値が保存されています。Goのオフィシャルドキュメントでは次のバージョンでPOST、GETといったデータは分離されると述べています。 diff --git a/ja/04.2.md b/ja/04.2.md index 6e22ee03..d5f1030c 100644 --- a/ja/04.2.md +++ b/ja/04.2.md @@ -1,20 +1,20 @@ # 4.2 フォームに入力された内容の検証 -Web開発の原則はユーザが入力したいかなる情報も信用してはならないということです。そのため、ユーザの入力した情報を検証しフィルターすることは非常に重要になってきます。ブログやニュースの中でどこそこのホームページがハッキングされたりセキュリティホールが存在するといったことをよく聞くかもしれません。これらの大部分はユーザの入力した情報に対してホームページが厳格な検証を行わなかった事によるものです。そのため、安全なWebプログラムを書くために、フォームの入力を検証する意義は非常に大きいのです。 +Web開発にはユーザが入力したいかなる情報も信用してはならないという原則があります。そのためユーザの入力した情報を検証しフィルターすることは非常に重要になってきます。ブログやニュースの中でどこそこのホームページがハッキングされたりセキュリティホールが存在するといったことをよく聞くかもしれません。これらの大部分はユーザの入力した情報に対してホームページが厳格な検証を行わなかった事によるものです。そのため、安全なWebプログラムを書くために、フォームの入力を検証する意義は非常に大きいのです。 -Webアプリケーションを書く時は主に2つの方面のデータ検証があります。ひとつはページ上でのjsによる検証で(現在この方面では多くのプラグインがあります。例えばValidationJSプラグインなどがそうです)、もうひとつはサーバ側での検証です。この節ではどのようにサーバでの検証を行うか解説します。 +Webアプリケーションを書く時は主に2つの場所でデータ検証を行います。ひとつはページ上でのJavaScriptによる検証で(現在この方面では多くのプラグインがあります。例えばValidationJSプラグインなどがそうです)、もうひとつはサーバ側での検証です。この節ではどのようにサーバでの検証を行うか解説します。 ## 必須フィールド -あるフォーム要素から一つの値を取り出したいとします。例えば、前の節のユーザ名はどのように処理するのでしょうか?Goにはbuiltin関数`len`があり、文字列の長さを得ることができます。lenを使ってデータの長さを測ることができます。例えば: +あるフォーム要素から一つの値を取り出したいとします。例えば前の節のユーザ名はどのように処理するのでしょうか?Goにはbuiltin関数`len`があり、文字列の長さを得ることができます。lenを使ってデータの長さを測ることができます。例えば: if len(r.Form["username"][0])==0{ //空だった場合の処理 } -`r.Form`は異なる型のフォーム要素の空白に対して異なる処理を行います。空のテキストフィールド、テキストエリアおよびファイルアップロードに対して、その要素の値を空にします。また選択されていないコンボボックスやセレクトボックスr.Formの中にはそもそもその項目を作りません。上の例の中の方法でデータを取得した時プログラムはエラーを発生させます。そのため、`r.Form.Get()`を使って値を取る必要があります。なぜなら、もしフィールドが存在しなかった場合、この方法で取得すると空の値を得るからです。ですが、`r.Form.Get()`は単体の値しか得ることができません。もしmapの値であれば、かならず上の方法で得る必要があります。 +`r.Form`は異なる型のフォーム要素の空白に対して異なる処理を行います。空のテキストフィールド、テキストエリアおよびファイルアップロードに対して、その要素の値を空にします。また選択されていないコンボボックスやセレクトボックスr.Formの中にはそもそもその項目を作りません。上の例の中の方法でデータを取得した時プログラムはエラーを発生させます。そのため、`r.Form.Get()`を使って値を取る必要があります。なぜなら、もしフィールドが存在しなかった場合、この方法で取得すると空の値を得るからです。ですが、`r.Form.Get()`は単体の値しか得ることができません。もしmapの値であれば必ず上の方法で得る必要があります。 ## 数 -たとえば、フォームからある人の年齢が50歳や10歳といった具体的な値を必要としていて、"おっさん"とか"若者"というようなものでなかったとします。このようにフォームの入力フィールドの中で数字のみを許容するようにさせたい場合、整数かどうかを判断するために、まずint型に変換を行ってから処理を行います。 +例えばフォームからある人の年齢が50歳や10歳といった具体的な値を必要としていて、"おっさん"とか"まだ若い"というようなものでなかったとします。このようにフォームの入力フィールドの中で数字のみを許容するようにさせたい場合、整数かどうかを判断するために、まずint型に変換を行ってから処理を行います。 正の整数を判断しようとする場合は、まずint型に変換してから処理を行います @@ -34,7 +34,7 @@ Webアプリケーションを書く時は主に2つの方面のデータ検 return false } -性能の高さを必要とするユーザからすれば、これはよく話題にのぼる問題です。彼らはなるべく正規表現を避けるべきだと考えています。なぜなら正規表現の速度は一般的に遅いからです。しかし現在のようにコンピュータの性能がこれほど発達した時代では、このように簡単な正規表現の効率と型変換関数の間ではそれほど大きな差はありません。もしあなたが正規表現に詳しく、他の言語でも使用されているのであれば、Goの中で正規表現を使うのは便利な方法の一つです。 +性能の高さを必要とするユーザからすればこれはよく話題にのぼる問題です。彼らはなるべく正規表現を避けるべきだと考えています。なぜなら正規表現の速度は一般的に遅いからです。しかし現在のようにコンピュータの性能がこれほど発達した時代では、このように簡単な正規表現の効率と型変換関数の間ではそれほど大きな差はありません。もしあなたが正規表現に詳しく、他の言語でも使用されているのであれば、Goの中で正規表現を使うのは便利な方法の一つです。 >Goの正規表現の実装は[RE2](http://code.google.com/p/re2/wiki/Syntax)です。すべての文字はUTF-8エンコーディングです。 @@ -95,7 +95,7 @@ selectには以下の要素があるとします: return false ## ラジオボタン -男と女という性別の選択肢を出力するようなラジオボタンで、どれかが選択されているか判断するとします。15歳の退屈な少年がhttpプロトコルの本を片手にtelnetクライアントからあなたのプログラムに対してリクエストを送信したとしましょう。あなたは男に1を、女に2を設定していて、彼が3という値を送信した場合、あなたのプログラムは例外を出すでしょうか?プルダウンメニューの判断と同じように我々が得ようとしている値がそもそも設定されたものであるかを判断しなければなりません。 +男と女という性別の選択肢を出力するようなラジオボタンでどれかが選択されているか判断するとします。15歳の退屈な少年がhttpプロトコルの本を片手にtelnetクライアントからあなたのプログラムに対してリクエストを送信したとしましょう。あなたは男に1を、女に2を設定していて、彼が3という値を送信した場合、あなたのプログラムは例外を出すでしょうか?プルダウンメニューの判断と同じように我々が得ようとしている値がそもそも設定されたものであるかを判断しなければなりません。 女 @@ -131,8 +131,7 @@ selectには以下の要素があるとします: 上の`Slice_diff`という関数には私のオープンソースのライブラリが含まれます(sliceとmapを操作するライブラリ)[https://github.com/astaxie/beeku](https://github.com/astaxie/beeku) ## 日付と時間 -ユーザが入力した日時が有効か確認したいとします。例えば -、ユーザがスケジュールで8月45日にパーティを開く予定を入力したり、未来の時間を誕生日にしてみたりといった場合です。 +ユーザが入力した日時が有効か確認したいとします。例えばユーザがスケジュールで8月45日にパーティを開く予定を入力したり、未来の時間を誕生日にしてみたりといった場合です。 Goではtimeの処理パッケージを提供しています。ユーザの入力した年月日を目的の時間に変換してから、判断を行います。 @@ -142,7 +141,7 @@ Goではtimeの処理パッケージを提供しています。ユーザの入 timeを取得した後、多くの時間関数の操作を行うことができます。具体的な判断は自身の要件に合わせて調整してください。 ## 身分証明書番号 -フォームに入力された身分証を検証する場合、正規表現を使っても簡単に検証できます。しかし身分証明書番号は15桁と18桁があるので2つとも検証しなければなりません。(訳注:中国では身分証明書とともに個人を特定する国民背番号があります。) +フォームに入力された身分証明書を検証する場合、正規表現を使って簡単に検証できます。しかし身分証明書番号は15桁と18桁があるので2つとも検証しなければなりません。(訳注:中国では身分証明書に個人を特定する身分証明番号(以前は15桁、現在は18桁)が記載されています。) //15桁の身分証明書の検証。15桁はすべて数字です。 if m, _ := regexp.MatchString(`^(\d{15})$`, r.Form.Get("usercard")); !m { @@ -154,7 +153,7 @@ timeを取得した後、多くの時間関数の操作を行うことができ return false } -以上よく使用されるサーバ側でのフォーム要素の検証をいくつかご紹介しました。このイントロダクションを通してGoによるデータ検証、特に正規表現での処理に対する理解が深まるよう願っています。 +以上、よく使用されるサーバ側でのフォーム要素の検証をいくつかご紹介しました。このイントロダクションを通してGoによるデータ検証、特に正規表現での処理に対する理解が深まるよう願っています。 ## links * [目次]() diff --git a/ja/04.3.md b/ja/04.3.md index 36876a96..f8818f8c 100644 --- a/ja/04.3.md +++ b/ja/04.3.md @@ -1,10 +1,10 @@ # 4.3 クロスサイトスクリプティングの予防 -現在のホームページは大量の動的なコンテンツを含み、ユーザのエクスペリエンスを高めています。以前に比べてとても複雑になっています。いわゆる動的なコンテンツとは、ユーザの環境と要求により、Webアプリケーションが目的の内容を出力できることを指します。動的なホームページは"クロスサイトスクリプティング"(Cross Site Scripting、セキュリティ専門家が一般的にXSSと省略するもの)と呼ばれる攻撃を受けることがあります。 +現在のホームページは大量の動的なコンテンツを含みユーザのエクスペリエンスを高めています。以前に比べてとても複雑になっています。いわゆる動的なコンテンツとはユーザの環境と要求に応じてWebアプリケーションが目的の内容を出力できることを指します。動的なホームページは"クロスサイトスクリプティング"(Cross Site Scripting、セキュリティ専門家が一般的にXSSと省略するもの)と呼ばれる攻撃を受けることがあります。 攻撃者は通常セキュリティホールのあるプログラム中にJavaScript、VBScript、ActiveXまたはFlashを挿入することでユーザを騙します。一旦攻撃が成功するとユーザアカウント情報が盗まれ、ユーザの設定を改ざんされてしまったり、cookieを盗みまたは汚染して悪意ある広告を埋め込んだりされます。 -XSSに対する最も効果的な予防は以下の二種類を組み合わせることです:すべての入力データを検証し、攻撃の検査をすること(これに関しては前の節でいくつかご紹介しました)。もうひとつは出力されるデータに対し適切な処理を行うことによって、すでに挿入されてしまったいかなるスクリプトに対してもブラウザで実行されないようにすることです。 +XSSに対する最も効果的な予防は以下の二種類を組み合わせることです:すべての入力データを検証し攻撃の検査をすること(これに関しては前の節でいくつかご紹介しました)。もうひとつは出力されるデータに対し適切な処理を行うことによってすでに挿入されてしまったいかなるスクリプトに対してもブラウザで実行されないようにすることです。 Goではどのようにこの効果的な防御を行なっているのでしょうか?Goのhtml/templateの中では以下のいくつかの関数によってエスケープすることができます。 @@ -47,7 +47,7 @@ Goのhtml/templateパッケージはデフォルトでhtmlタグをフィルタ Hello, ! -`template.HTML`に変換した後も、変数の内容はエスケープされません。  +`template.HTML`に変換した後も変数の内容はエスケープされません。  エスケープの例: diff --git a/ja/04.4.md b/ja/04.4.md index e47d9827..72a8bf90 100644 --- a/ja/04.4.md +++ b/ja/04.4.md @@ -1,8 +1,8 @@ # 4.4 フォームの複数回送信の防止 -以前どこかのBBSやブログでご覧になったかもしれませんが、一つのスレや文章の後でいくつもの重複が記録されていることがあります。これらの大多数はユーザが複数回書き込みフォームを送信してしまったことによるものです。様々な原因で、ユーザはよくフォームを複数回送信してしまいます。通常はマウスの誤操作によるもので、送信ボタンをダブルクリックしてしまったり、一旦送信した内容を再度修正しようとして、ブラウザの戻るボタンを押した後に次へボタンではなくまた送信ボタンを押してしまうことによるものです。当然、故意によるものもあります。- - 例えばネット上のアンケート調査やくじ引きにおいて重複して投票するなどです。では、どのようにしてユーザが同じ内容のフォームの送信を行うことを効果的に防げるのでしょうか? +これまでにどこかのBBSやブログでご覧になったことがあるかもしれませんが、一つのスレッドや文章の後でいくつもの重複が記録されていることがあります。これらの大多数はユーザが複数回書き込みフォームを送信してしまったことによるものです。様々な原因でユーザはよくフォームを複数回送信してしまいます。通常はマウスの誤操作によるもので、送信ボタンをダブルクリックしてしまったり、一旦送信した内容を再度修正しようとして、ブラウザの戻るボタンを押した後に次へボタンではなくまた送信ボタンを押してしまうことによるものです。当然、故意によるものもあります。- - 例えばネット上のアンケート調査やくじ引きにおいて重複して投票するなどです。では、どのようにしてユーザが同じ内容のフォームの送信を行うことを効果的に防げるのでしょうか? -解決方法はフォームの中に唯一の値を持ったhiddenフィールドを追加することです。フォームを検証する際、この唯一の値を持ったフォームがすでに送信されているかどうか検証します。もしすでに送信されていれば、二回目の送信を拒絶します。そうでなければフォームに対して処理ロジックを行います。また、もしAjax形式で送信するフォームだった場合、フォームが送信された後、javascriptによってフォームの送信ボタンを禁止します。 +解決方法はフォームの中にユニークな値を持ったhiddenフィールドを追加することです。フォームを検証する際、このユニークな値を持ったフォームがすでに送信されているかどうか検証します。もしすでに送信されていれば、二回目の送信を拒絶します。そうでなければフォームに対して処理ロジックを行います。また、もしAjax形式で送信するフォームだった場合、フォームが送信された後javascriptによってフォームの送信ボタンを禁止します。 4.2節の例を改良してみましょう: @@ -14,7 +14,7 @@ -テンプレートの中に`token`というhiddenフィールドを追加しました。この値にはMD5(タイムスタンプ)によってユニークな値を割り当てます。この値をサーバに保存することで(sessionによってコントロールは、6章でどのように保存するか解説します)フォームが送信される際の判定に使うことができます。 +テンプレートの中に`token`というhiddenフィールドを追加しました。この値にはMD5(タイムスタンプ)によってユニークな値を割り当てます。この値をサーバに保存することで(sessionによるコントロールは6章でどのように保存するか解説します)フォームが送信される際の判定に使うことができます。 func login(w http.ResponseWriter, r *http.Request) { fmt.Println("method:", r.Method) //リクエストを受け取る方法 @@ -48,9 +48,9 @@ 図4.4 tokenを追加した後クライアントが出力するソース情報 -tokenはすでに出力値を持っていますので、連続してページを更新することができます。この値が次々と変化するのがお分かりいただけるかと思います。このように毎回formが表示される時にユニークになるよう保証します。ユーザが送信するフォームは唯一性が保持されます。 +tokenはすでに出力値を持っていますので連続してページを更新することができます。この値が次々と変化するのがお分かりいただけるかと思います。このように毎回formが表示される時にユニークになるよう保証します。ユーザが送信するフォームは唯一性が保持されます。 -この解決方法は悪意の無い攻撃に対しても防止することができます。また悪意のあるユーザに対してもしばらく効果があります。その後、この悪意のある動機を捨て去ることができなかった場合は更に複雑な作業が必要となります。 +この解決方法は悪意の無い攻撃に対しても防止することができます。また悪意のあるユーザに対してもしばらく効果があります。その後、ユーザーにこの悪意のある動機を捨てさせることができなかった場合は更に複雑な作業が必要となります。 ## links * [目次]() diff --git a/ja/04.5.md b/ja/04.5.md index 826bb052..9d33e8f7 100644 --- a/ja/04.5.md +++ b/ja/04.5.md @@ -1,7 +1,8 @@ # 4.5 ファイルのアップロード処理 + ユーザによるファイルのアップロードを処理したいとします。例えば、現在Instagramのようなホームページを作成しているとします。ユーザが撮影した写真を保存する必要があります。このような要求はどのように実現するのでしょうか? -フォームにファイルをアップロードさせるためには、まずformの`enctype`属性を追加する必要があります。`enctype`属性には以下の3つの状態あります: +フォームにファイルをアップロードさせるためには、まずformの`enctype`属性を追加する必要があります。`enctype`属性には以下の3つの種類があります: application/x-www-form-urlencoded 送信前にすべての文字列をエンコードする(デフォルト) multipart/form-data 文字列に対してエンコードしません。ファイルのアップロードウィジェットを含むフォームを使用するときはこの値が必要です。 diff --git a/ja/04.6.md b/ja/04.6.md index bc8c035e..d0ec0aa4 100644 --- a/ja/04.6.md +++ b/ja/04.6.md @@ -1,5 +1,6 @@ # 4.6 まとめ -この一章ではGoでどのようにフォームの情報を処理するか学びました。ユーザのログインから、ファイルのアップロードの例で、Goがformの情報およびファイルをアップロードする手段についてご説明しました。しかし、フォームを処理する過程ではユーザの入力した情報を懸賞する必要があります。ホームページのセキュリティの重要性を考慮すると、データのフィルタリングは相当重要です。そのため、以降の章では異なる方面のデータフィルタリングをご説明します。同時にGoの文字列に対する正規表現についても述べます。 + +この一章ではGoでどのようにフォームの情報を処理するか学びました。ユーザのログインから、ファイルのアップロードの例で、Goがformの情報およびファイルをアップロードする手段についてご説明しました。しかしフォームを処理する過程ではユーザの入力した情報を検証する必要があります。ホームページのセキュリティの重要性を考慮すると、データのフィルタリングは相当重要です。そのため以降の章では異なる方面のデータフィルタリングをご説明します。同時にGoの文字列に対する正規表現についても述べます。 この一章を通してクライアントとサーバが如何にデータを互いにやりとりするか理解いただけたと思います。クライアントはデータをサーバシステムに渡し、サーバはデータを受け取って結果をクライアントにフィードバックします。 diff --git a/ja/07.4.md b/ja/07.4.md index 4ad39ce7..f883dd3f 100644 --- a/ja/07.4.md +++ b/ja/07.4.md @@ -337,7 +337,7 @@ Webアプリケーションを作る時はテンプレートの一部が固定 s1.Execute(os.Stdout, nil) } -上の例で`template.ParseFiles`を使ってすべてのネストしたテンプレートをテンプレートの中にパースできることがお分かりいただけたかと思います。各定義の{{define}}はすべて独立した一個のテンプレートで、互いに独立しています。並列して存在している関係です。内部ではmapのような関係(keyがテンプレートの名前で、valueがテンプレートの内容です。)が保存されています。その後`ExecuteTemplate`を使って対応するサブテンプレートの内容を実行します。headerとfooterのどちらも互いに独立していることがわかります。どれもコンテンツを出力できます。contenrtの中でheaderとfooterのコンテンツがネストしているので、同時に3つの内容を出力できます。しかし、`s1.Execute`を実行した時、何も出力されません。デフォルトではデフォルトのサブテンプレートが無いからです。そのため何も出力されません。 +上の例で`template.ParseFiles`を使ってすべてのネストしたテンプレートをテンプレートの中にパースできることがお分かりいただけたかと思います。各定義の{{define}}はすべて独立した一個のテンプレートで、互いに独立しています。並列して存在している関係です。内部ではmapのような関係(keyがテンプレートの名前で、valueがテンプレートの内容です。)が保存されています。その後`ExecuteTemplate`を使って対応するサブテンプレートの内容を実行します。headerとfooterのどちらも互いに独立していることがわかります。どれもコンテンツを出力できます。contentの中でheaderとfooterのコンテンツがネストしているので、同時に3つの内容を出力できます。しかし、`s1.Execute`を実行した時、何も出力されません。デフォルトではデフォルトのサブテンプレートが無いからです。そのため何も出力されません。 >単一の集合のようなテンプレートは互いを知っています。もしあるテンプレートが複数の集合によって使用された場合、複数の集合の中で別々にパースされる必要があります。 diff --git a/ja/README.md b/ja/README.md index 46bc88ec..72b5a95f 100644 --- a/ja/README.md +++ b/ja/README.md @@ -1,2 +1,2 @@ -# Go Web プログラミング -Webプログラミングが好きでGo webプログラミングを書きました。皆さんに気にいってもらえれば幸いです。 +# Go Web プログラミング +Webプログラミングが好きでGo webプログラミングを書きました。皆さんに気にいってもらえれば幸いです。 diff --git a/ja/build-web-application-with-golang.epub b/ja/build-web-application-with-golang.epub new file mode 100644 index 00000000..dc08e4be Binary files /dev/null and b/ja/build-web-application-with-golang.epub differ diff --git a/ja/build.go b/ja/build.go index 8228b893..bbf8b47b 120000 --- a/ja/build.go +++ b/ja/build.go @@ -1 +1 @@ -../../ebook/build.go \ No newline at end of file +../zh/build.go \ No newline at end of file diff --git a/ja/build.sh b/ja/build.sh index a100c8e3..c4c5d65d 120000 --- a/ja/build.sh +++ b/ja/build.sh @@ -1 +1 @@ -../../ebook/build.sh \ No newline at end of file +../zh/build.sh \ No newline at end of file diff --git a/ja/src b/ja/src index 9fc720a7..c4eaad53 120000 --- a/ja/src +++ b/ja/src @@ -1 +1 @@ -../../ebook/src \ No newline at end of file +../zh/src \ No newline at end of file diff --git a/tr/01.0.md b/tr/01.0.md new file mode 100644 index 00000000..763534d6 --- /dev/null +++ b/tr/01.0.md @@ -0,0 +1,20 @@ +# 1 Go Ortam Yapılandırması + +Go dünyasına hoş geldiniz, hadi keşfetmeye başlayalım! + +Go hızlı derlenebilen, hafıza işlemlerini otomatik halleden, paralel işleme olanak sağlayan bir programlama dilidir. Go'nun avantajları: + +- Büyük projeler bir kaç saniyede derlenebilir. +- C-stili `header` dosyalarıyla ilgi sorunlardan arındırılmış, anlaşılması kolay bir yazılım modeli sağlıyor. +- Veri tiplerinde seviyeler olamayan statik bir dil, bu sayede geliştiriciler tipleri arasındaki ilişkilerle uğraşak zaman harcamıyor. Hafif nesne-yönelimli dil olarak değerlendirilebilir. +- Hafızadaki kullanılmayan verileri otomatik temizliyor(garbage collection). Parelel programlar ve programlar arası bağlantı için destek sunuyor. +- Çok çekirdekli bilgisayarlar için tasarlanmıştır. + +Go derlenen bir dil. Yorumlanan ya da dinamik tipli dillerin geliştirme verimliliğini statik dillerin güvenliği ile birleştiriyor. Modern, çok çekirdekli bilgisayarlar ile ağ programlamanın gelecekti dili olacaktır. Bu amaçlar doğrultusunda, seçilecek dilin oldukça maliyetli hafif bir tip sistemi, paralel işlemler için bir model ve tam anlamıyla optimize edilmiş bir hafıza denetimi gibi bir kaç soruna çözüm getirmiş olması gerkiyor. Uzun süredir, bu sorunlara çözüm üretmeyi hedefleyen bir paket veya araç çıkmaması Go dilinin doğmasını sağlayacak motivasyonu oluşturmuştur. + +Bu bölümde, size Go geliştirme ortamınızı nasıl kurup, yapılandıracağınızı göstereceğim. + +## Links + +- [İçerik](preface.md) +- Sonraki bölüm: [Kurulum](01.1.md) diff --git a/tr/01.1.md b/tr/01.1.md new file mode 100644 index 00000000..82f0a68e --- /dev/null +++ b/tr/01.1.md @@ -0,0 +1,122 @@ +# 1.1 Kurulum + +## Go'yu kurmanın üç yolu + +Bilgisayarınızda Go geliştirme ortamını yapılandırmanın bir çok youlu var, ve hangisini isterseniz onu seçebilirsiniz. En çok tercih edilen üç yol aşağıdakilerden oluşmaktadır. + + +- Resmi kurulum paketleri. + - Go ekibi Windows, Linux, Mac ve diğer işletim sistemleri için pratik bir kurulum paketi sunuyor. Muhtemelen başlamanın en kolay yolu da bu paket. +- Kaynak kodunu kullanarak kurmak. + - Unix benzeri sistemleri kullananlar için popüler bir yöntem. +- Üçüncü parti yazılımları kullanarak. + - Go'yu kurmak için bir çok üçüncü parti yazılım mevcut, Ubuntu/Debian için apt-get, Mac için homebrew. + +Eğer birden fazla Go sürümünü kurmak isterseniz, [GVM](https://github.com/moovweb/gvm) aracını kullanabilirsiniz. Birden fazla sürümü kurmanın en iyi yolu bu aracı kullanmak, aksi halde kendiniz uğraşmak zorunda kalacaksınız. + +## Kaynak kodu kullanarak + +Go'nun bazı bölümleri Plan 9 C ve AT&T derleyicisi kullanarak yazılmıştır, bu yüzden bir sonraki adıma geçmek için bir C derleyicisi kurmanız gerekiyor. + +Mac için, daha önce xcode'u kurduysanız zaten derleyiciniz var demektir. + +Unix türevi sistemler için, gcc ya da benzer bir derleyici kurmalısınız. Örneğin, apt-get paket yöneticisini kullanarak(Ubuntu/Debian), gerekli derleyici paketlerini kurabilirsiniz: + + `sudo apt-get install gcc libc6-dev` + +Windows için , gcc kurmak için önce MinGW'yi kurmanız gerekmektedir. Kurulum bittikten sonra ortam değişkenlerini yapılandırmayı unutmayın.( ***Bu formattaki satırlar çevirmenin yorumlarını içerir: 64-bit Windows kullanıyorsanız, MinGW'nin 64-bit sürümünü kurmalısınız*** ) + +Go ekibi kaynak kodlarını yönetmek için [Mercurial](http://mercurial.selenic.com/downloads/) kullanıyor, Go'nun kaynak kodlarını alabilmek için sizinde yüklemeniz gerekiyor. + +Bu aşamada, aşağıdaki komut Go kaynak kodunu klonlayıp, derleyecektir.( ***Kaynak kodlarını bulunduğunuz dizine klonlayacaktır. Devam etmeden önce çalışma dizininize geçin. Bu işlemin sonuçlanması biraz zaman alabilir.*** ) + + hg clone -u release https://code.google.com/p/go + cd go/src + ./all.bash + +"ALL TESTS PASSED." mesajı kurulumun başarılı bir şekilde yapıldığını bildirir. + +Windows için , `all.bat` isimli dosyayı çalıştırarak da aynı sonuca ulaşabilirsiniz. + +Eğer Windows kullanıyorsanız, kurulum paketi sizin için ortam değişkenlerini otomatik olarak yapılandırcaktır. Unix türevi sistemlerde, aşağıdaki komutları kullanarak ortam değişkenlerini ayarlayabilirsiniz. ( ***Eğer Go sürümünz 1.0dan büyükse GOBIN değişkeni otomatik olarak GOROOT/bin olarak ayarlanacaktır. Sonraki bölümde daha ayrıntılı inceleyeceğiz.***) + + export GOROOT=$HOME/go + export GOBIN=$GOROOT/bin + export PATH=$PATH:$GOROOT/bin + +Eğer aşağıdaki ekranı görebiliyorsanız, kurulumunuz tamamlanmış demektir. + +![](images/1.1.mac.png?raw=true) + +Şekil 1.1 Kaynak kod ile Go kurduktan sonraki bilgilendirme ekranı + +Ekranda Go bilgilerini görebiliyorsanız, kurulum başarılı olmuş demektir. Eğer "komut bulunamadı" uyarısını alırsanız, $PATH ortam değişkenin Go kurulum dizinini içerip içermediğini kotrol edin. + +## Standart kurulum paketlerini kullanarak +Go desteklediği her işletim sistemi için tek tıkla çalışan kurulum paketlerine sunar. Bu paketler Go'yu öntanımlı olarak `/usr/local/go` (`c:\Go` Windows'da )dizinine kurar. Tabiki bunu değiştirebilirsiniz, ama yukarıda gösterilen bütün ortam değişkenlerinide güncellenmeniz gerekcektir.. + +### Sisteminizin 32-bit mi yoksa 64-bit mi olduğunu nasıl anlarsınız? + +Bir sonraki adım işletim sistemine bağlı, bu yüzden standart kurulum paketlerini indirmeden önce bunu öğrenmeliyiz. + +Eğer Windows kullanıyorsanız `Win + r` tuşlarına basın. Açılan pencerede `systeminfo` yazıp enter tuşuna basarsınız size işletim sisteminiz hakkında bilgiler verecektir. "system type" ile başlıyan satırı bulun, eğer "x64-based PC" ifadesini görürseniz, bilgisayarınız 64-bit aksi halde 32-bit'tir. + +Ben şiddetle 64-bitlik paketi indirmenizi öneriyorum. Eğer Mac kullanıyorsanız Go artık 32-bitlik işlemciler için destek sunmuyor. + +Linux kullanıcılar `uname -a` ile gerekli bilgiye ulaşabilir. +Eğer bilgisayarınız 64-bit ise aşağıdaki gibi bir ekran görmeniz gerekiyor: + + x86_64 x86_64 x86_64 GNU/Linux + // Ubuntu 10.04 türevlerinde aşağıdaki gibide görülebilir + x86_64 GNU/Linux + +32-bit ise: + + i686 i686 i386 GNU/Linux + +### Mac + +[İndirme sayfasına](http://code.google.com/p/go/downloads/list) gidin , 32-bit sistemler için `go1.0.3.darwin-386.pkg` ya da 64-bit sistemler için `go1.0.3.darwin-amd64.pkg` seçin. Sayfanın sonuna gidip "next" tıklayın, kurulum bitince `~/go/bin` $PATH değişkenine otomatik olarak eklenecektir. Bir terminal açıp `go` yazın ve enter tuşuna basın. Şekil 1.1'dekine benzer bir çıktı almanız gerekiyor. + +### Linux + +[İndirme sayfasına]((http://code.google.com/p/go/downloads/list) gidin , 32-bit sistemler için `go1.0.3.linux-386.tar.gz` ya da 64-bit sistemler için `go1.0.3.linux-amd64.tar.gz` seçin. Go'yu `$GO_INSTALL_DIR` altına kurmak istediğinizi varsayalım. `tar zxvf go1.0.3.linux-amd64.tar.gz -C $GO_INSTALL_DIR` komutunu kullanarak arşiv dosyasını istediğiniz dizine açın. $PATH değişkenini ayarlayın: `export PATH=$PATH:$GO_INSTALL_DIR/go/bin`. Bir terminal açıp `go` yazın ve enter tuşuna basın. Şekil 1.1'dekine benzer bir çıktı almanız gerekiyor. + +### Windows + +[İndirme sayfasına]((http://code.google.com/p/go/downloads/list) gidin, 32-bit sistemler için `go1.0.3.windows-386.msi` ya da 64-bit sistemler için `go1.0.3.windows-amd64.msi` seçin. Sayfanın sonuna gidip "next" tıklayın, kurulum bitince `c:/go/bin` $PATH değişkenine otomatik olarak eklenecektir. Bir terminal açıp `go` yazın ve enter tuşuna basın. Şekil 1.1'dekine benzer bir çıktı almanız gerekiyor. + +## Üçüncü parti yazılımları kullanarak + +### GVM + +GVM üçüncü parti çoklu Go versiyonlarını kullanmayı sağlayan bir yazılım, ruby için rvm gibi. Kullanımı oldukça basit. Aşağıdaki komutları terminalinize yazarak kurabilirsiniz: + + bash < <(curl -s https://raw.github.com/moovweb/gvm/master/binscripts/gvm-installer) + +Sonrasında Go'yu kurmak için: + + gvm install go1.0.3 + gvm use go1.0.3 + +İşlemler bitince, hazırsınız. + +### apt-get + +Ubuntu en popüler Linux dağıtımlarından biridir. Ubuntu `apt-get` paket yöneticisini kullanıyor. Aşağıdaki komutlarla Go'yu rahatça kurabilirsiniz. + + sudo add-apt-repository ppa:gophers/go + sudo apt-get update + sudo apt-get install golang-stable + +### Homebrew + +Homebrew Mac işletim sistemi için yazılmış bir paket yönetim sistemidir. Go'yu kurmak için aşağıdaki komutu kullanabilirsiniz. + + brew install go + +## Linkler + +- [İçerik](preface.md) +- Önceki bölüm: [Go ortam yapılandırma](01.0.md) +- Sonraki bölüm: [$GOPATH ve çalışma ortamı](01.2.md) diff --git a/tr/01.2.md b/tr/01.2.md new file mode 100644 index 00000000..1984f8e3 --- /dev/null +++ b/tr/01.2.md @@ -0,0 +1,151 @@ +#1.2 $GOPATH ve Çalışma Ortamı + +## $GOPATH + +Go komutları, önemli bir ortam değişkeni olan $GOPATH üzerinden çalışır. Bu değişkeni Go'nun kurulu olduğu dizini veren $GOROOT ile karıştırmayın. Bu değişken bilgisayarınızdaki Go çalışma ortamının hangi dizinde olduğunu gösterir (Aşağıdaki dizin yapısı örnek olarak verilmiştir, siz kendinize göre dizin yolunu değiştirebilirsiniz). + +Unix türevi işletim sistemlerinde, aşağıdaji komutla değişkeni ayarlayabilirsiniz: + + export GOPATH=/home/apple/mygo + +Windows'da ise, GOPATH adında bir ortam değişkeni oluşturup, değerini `c:\mygo` ( ***ya da sizin istediğiniz herhangi bir yer*** ) olarak atayabilirsiniz. + +$GOPATH içinde birden fazla dizin yolu(çalışma ortamı) olabilir, dizinleri `:` ayırabilirsiniz(Windows'da`;`). Birden fazla çalışma ortamınız var ise `go get` indirdiği içeriği $GOPATH'teki ilk dizine yazacaktır. + +$GOPATH içinde aşağıdaki üç dizinden oluşur: + +- `src` -> kaynak dosyalar için(.go, .c vb uzantılı) +- `pkg` -> derlenmiş dosyalar için(.a uzantılı) +- `bin` -> çalıştırılabilir dosyalar için + +Bu kitapta, `mygo` dizini $GOPATH'in gösterdiği çalışma ortamı olacak. + +## Paket dizinleri + +Paket ve kaynak dosyaları `$GOPATH/src/mymath/sqrt.go` şeklinde oluşturun (`mymath` paketin ismidir) ( ***`mymath` paket ismi değişebilir, fakat paket ismi ve paketleri oluşturan kaynak kodların bulunduğu dizinin ismi aynı olmalıdır***) + +Her paket için `src` altında yeni bir dizin oluşturmalısınız. Dizin isimleri genelde paket ismiyle aynı olur/olmalıdır. Paket oluştururken iç içe dizinler açabilirsiniz. Örneğin, eğer `$GOPATH/src/github.com/astaxie/beedb` dizini oluşturursanız, paket yolu `github.com/astaxie/beedb` olacaktır. Paket ismi ise en son dizinin ismi olacaktır, önceki örnekte `beedb` paket ismi olacaktır. + +Terminalinizde aşağıdaki komutları çalıştırın. ( ***Bu kısımda örneklerden bahsedeceğiz*** ) + + cd $GOPATH/src + mkdir mymath + +`sqrt.go` isminde bir dosya oluşturun, aşağıdaki kod bloğunu ekleyin. + + //$GOPATH/src/mymath/sqrt.go kaynak kodu + package mymath + + func Sqrt(x float64) float64 { + z := 0.0 + for i := 0; i < 1000; i++ { + z -= (z*z - x) / (2 * x) + } + return z + } + +Yukarıdaki adımların sonunda ilk paketimizi oluşturmuş olduk. Paket isimlerinin bulundukları dizinin adı ile aynı olmasına özen gösterin. + +## Paketleri derleme + +Yukarıda ilk paketimizi oluşturmuştuk, peki projelerimizde kullanmak için nasıl derleyeceğiz? İki şekilde yapabiliriz: + +1. Paket dizinin içindeyken `go install` komutunu çalıştırarak. +2. Herhangi bir dizindeyken `go install mymath` komutunu çalıştırarak. + +Derleme işlemi bittikten sonra, aşağıdaki komutları çalıştırırsanız. + + cd $GOPATH/pkg/${GOOS}_${GOARCH} + // derlenmiş halinin oluştuğunu görebilirsiniz + mymath.a + +`.a` uzantılı dosya paketimizin binary halini içeriyor. Peki bu dosyayı nasıl kullanacağız? + +Öncelikle yeni bir uygulama oluşturmalıyız. + +`mathapp` adında yeni bir uygulama oluşturun. + + cd $GOPATH/src + mkdir mathapp + cd mathapp + vim main.go + +Kaynak kod: + + //$GOPATH/src/mathapp/main.go + package main + + import ( + "mymath" + "fmt" + ) + + func main() { + fmt.Printf("Merhaba, dünya. Sqrt(2) = %v\n", mymath.Sqrt(2)) + } + +Uygulamyı derlemek için, `$GOPATH/src/mathapp` dizinine geçip, `go install` komutunu çalıştırın. `$GOPATH/bin/` altında `mathapp` dizinin oluştuğunu göreceksiniz. Uygulamanızı çalıştırmak için, `./mathapp` komutunu çalıştırın. Aşağıdaki gibi bir çıktı alıyor olmanız lazım. + + Merhaba, dünya. Sqrt(2) = 1.414213562373095 + +## Üçüncü-parti paketleri kurmak + +Üçüncü-parti paketleri kurmak için `go get` komutunu kullanabilirsiniz. Bir çok açık-kaynak platformu destekliyor; Github, Google Code, BitBucket, ve Launchpad. + + go get github.com/astaxie/beedb + +`go get -u …` kullanarak var olan paketlerinizi güncelleyebilirsiniz ve aynı zamanda bağımlılıklarıda otomatik olarak yükleyecektir. + +`go get` versiyon kontrol sistemleri üzerinden çalışmaktadır. Bu yüzden `go get`'i kullanabilmek için `git`, `hg` gibi yazılımları kurmuş olmanız gerekmektedir. + +Yukarıdaki komutları çalıştırdıktan sonra, çalışma ortamınız aşağıdaki dizin yapısına sahip olacaktır. + + $GOPATH + src + |-github.com + |-astaxie + |-beedb + pkg + |--${GOOS}_${GOARCH} + |-github.com + |-astaxie + |-beedb.a + +Aslında, `go get` kaynak kodu çalışma ortamınızdaki `src` dizinine kopyalayıp, `go install` komutunu çalıştırıyor. + +Üçüncü-parti paketleri aşağıdaki gibi kullanabilirsiniz. + + import "github.com/astaxie/beedb" + +## Dizin yapısı + +Yukardaki adımları tamamladıysanız, çalışma ortamınızdaki dizin yapısı aşağıdaki gibi olacaktır. + + bin/ + mathapp + pkg/ + ${GOOS}_${GOARCH}, such as darwin_amd64, linux_amd64 + mymath.a + github.com/ + astaxie/ + beedb.a + src/ + mathapp + main.go + mymath/ + sqrt.go + github.com/ + astaxie/ + beedb/ + beedb.go + util.go + +Yukarıdaki yapından açık şekilde görüldüğü gibi; `bin` çalıştırılabilir dosyaları, `pkg` derlenmiş dosyaları ve `src` kaynak dosyaları içermektedir. + +(Windows'daki ortam değişkenlerinin formatı `%GOPATH%` şeklinde olmalıdır, bu kitap unix türevi sistemler üzerinden anlatılmaktadır, bu sebeble Windows kullanıcıları kendi sistemlerine uygun formatı kullanmalıdır .) + +## Linler + +- [İçeriik](preface.md) +- Önceki bölüm: [Kurulum](01.1.md) +- Sonraki bölüm: [Go komutları](01.3.md) diff --git a/tr/01.3.md b/tr/01.3.md new file mode 100644 index 00000000..a7310864 --- /dev/null +++ b/tr/01.3.md @@ -0,0 +1,104 @@ +#1.3 Go Komutları + +## Go Komutları + +Go dili kapsamlı bir araç seti ile beraber geliyor. Terminalinizden `go` komutunu çalıştırarak bunları görebilirsiniz: + +![](images/1.3.go.png?raw=true) + +Şekil 1.3 Go komutlarnın detaylı gösterimi + +Hepsi çok kullanışlı araçlar. Şimdi onları nasıl kullanabileceğimize bakalım. + +## go build + +Go paketlerini derlemek için kullanılan komuttur. Eğer gerektiği durumlarda bağmlı olan paketleride otomatik derler. + +- Eğer paket `main` değilde, bölüm 1.2 deki gibi `mymath` ise, `go build` çalıştığında hiç birşey oluşturulmayacak. Eğer `$GOPATH/pkg` içinde `.a` uzantılı derlemiş haline istiyorsanız, `go install` komutunu kullanabilirsiniz. +- Eğer paket `main` ise, aynı dizin içinde çalıştırılabilir haline oluşturcaktır. Eğer oluşacak dosyanın `$GOPATH/bin` içinde olmasını istiyorsanız, `go install` ya da `go build -o ${DİZİN_YOLU}/a.exe` olarak çalıştırın. +- Dizinde birden fazla go dosyası varsa, ve sadece birini derlemek istiyorsanız, `go build` komutuna dosya ismini argüman olarak vermelisiniz. Örneğin, `go build a.go`. `go build` argüman almaz ise dizindeki bütüm dosyaları derleyecektir. +- Oluşacak dosyanın isminide önceden belirieyebilirsiniz. Örneğin, `mathapp` projesinde (bölüm 1.2'deki), `go build -o astaxie.exe` komutu `mathapp.exe` yerine `astaxie.exe` adında bir dosya oluşturacaktır. Öntanımlı isimlendirme ya dizin ismi ya da ilk kaynak kodu içeren dosya ismi olarak seçilmiştir. + +( [Go Programlama Dili Kılavuzu](https://golang.org/ref/spec)'na göre , paket isimleri `package` anahtar kelimesinden sonra kaynak dosyanın ilk satırına yazılmalıdır. Dizin ismi ile aynı olması zorunlu değildir, çalıştırılabilir dosyanın ismi dizin ismi olacaktır.]) + +- `go build`, `_` ya da `.` ile başlayan dosyaları görmezden gelir. +- Her işletim sistemi için ayrı dosyalar tutmak isterseniz, işletim sistemi ismini ek olarak kullanabilirsiniz. Örneğin, `array.go`'yu farklı sistemler için yazacaksanız. Dosya isimleri aşağıdaki gibi olabilir: + + array_linux.go | array_darwin.go | array_windows.go | array_freebsd.go + +`go build` işletim sisteminize göre derleme işlemini yapacaktır. Örneğin, Linux kullanıyorsanız sadece array_linux.go derleyip, diğerlerini yoksayacaktır. + +## go clean + +Derleyici tarafından oluşturulmuş aşağıdaki dosyaları temizler: + + _obj/ // eski obje klasörü, Makefiles tarafından oluşturulmuş + _test/ // eksi test klasörü, Makefiles tarafından oluşturulmuş + _testmain.go // eski gotest dizini, Makefiles tarafından oluşturulmuş + test.out // eski test dizini, Makefiles tarafından oluşturulmuş + build.out // eksi test dizini, Makefiles tarafından oluşturulmuş + *.[568ao] // obje dosyaları, Makefiles tarafından oluşturulmuş + + DIR(.exe) // go build tarafıdan oluşturulmuş + DIR.test(.exe) // go test -c tarafından oluşturulmuş + MAINFILE(.exe) // go build MAINFILE.go tarafından oluşturulmuş + +Projelerimi Github'a göndermeden önce genellikle bu komutu çalıştırırım. Yereldeki testler için önemli, ama sürüm takip için gereksiz dosyalar. + +## go fmt + +Öncede C/C++ ile çalışmış olanlar, hangi kodlama stilinin daha iyi olduğu konusundaki tartışmları biliyordur: K&R-stili ya da ANSI-stili. Go da ise, herkesin kullanmak zorunda olduğu sadece bir kod stili vardır. Örneğin, açma parantezleri satır sonlarını yazılmalıdır, yeni bir satırda yazılamazlar, eğer bu kurala uymazsanız derleme hatası alacaksınız! Neyse ki, bu kuralları ezberlemek zorunda değilsiniz. `go fmt` bu işi sizin yerinize yapacaktır. Terminalinizde `go fmt .go` komutunu çalıştırmanız yetecektir. Bir çok IDE siz dosyayı kaydettiğinizde otomatik olarak bu komutu çalıştıracaktır. IDE'ler hakkında bir sonraki bölümde daha ayrıntılı bilgi vereceğim. + +`gofmt` şeklind değilde `go fmt -w` şeklinde kullanmanız daha iyi olcaktır. `-w` parametresi formatladıktan sonra değişiklikleri kaydetcektir. `gofmt -w src` ise src altındaki butun dosyaları formatlar. + +## go get + +Bu komut üçüncü parti paketleri almanızı sağlar. Şuanda; BitBucket, Github, Google Code ve Launchpad desteği sunuyor. Bu komutu çalıştırdığımızda iki şey yapılıyor. Birincisi Go kaynak kodunu indiriyor, ikinci olarakta `go install` komutunu çalıştırıyor. Bu komutu çalıştırmadan önce, gerekli araçları kurudğunuzdan emin olun. + + BitBucket (Mercurial Git) + Github (git) + Google Code (Git, Mercurial, Subversion) + Launchpad (Bazaar) + +Bu komutu kullanmak için, yukarıdaki araçları kurmuş olmanız lazım. `$PATH` değişkenini ayarlamayıda unutmayın. Bu arada, özel alan adlarınıda destekliyor. `go help remote` komutu ile daha ayrıntılı bilgi edinebilrsiniz. + +## go install + +Bu komut bütün paketleri derleyip oluşan dosyaları, `$GOPATH/pkg` ya da `$GOPATH/bin` altına taşır. + +## go test + +Bu komut `*_test.go` ile biten dosyaları derleyip çalıştırır, gerekli bilgileri ekrana basar. + + ok archive/tar 0.011s + FAIL archive/zip 0.022s + ok compress/gzip 0.033s + ... + +Öntanımlı olarak bütün test dosyalarını çalıştırır. `go help testflag` komutunu kullanarak daha ayrıntılı bilgi elde edebilirsiniz. + +## go doc + +Bir çok insan Go için üçüncü parti bir dökümantasyona aracına gerek olamdığını düşünüyor (aslına bakarsanız ben bir tane yazdım bile [CHM](https://github.com/astaxie/godoc)). Go dökümanları yönetmek için çok güçlü bir araca sahip. + +Peki bir paketin dökümantasyonuna nasıl bakabiliriz? Örneğin, Eğer bir `builtin` paket hakkında daha fazla bilgi istiyorsanız, `go doc builtin` komutunu işinizi görecektir. Benzer şekilde, `go doc net/http` komutu ile `http` paketi hakkında bilgi elde edebilirsiniz. Fonksiyonlar hakkında daha ayrıntılı bilgi istiyorsanız, `godoc fmt Printf` ve `godoc -src fmt Printf` komutları işinizi görecektir(`-src` fonksiyonun kodlarını göstercektir). + +`godoc -http=:8080` komutunu çalıştırın, `127.0.0.1:8080` adresine gidin. `golang.org`'ın lokal versiyonunu görmüş olmanız gerekiyor. Sadece standart paketler hakkında değil, `$GOPATH/pkg` altındaki bütün paketler içinde bilgileri bulabilirsiniz. Büyük Çin Güvenlik duvarından dökümantasyonlara erişemeyenler için. + +## Diğer komutlar + +Go yukarıda bahsettiklerimizden daha fazla komut sunuyor. + + go fix // versiyon yükseltme + go version // Kulladığınız Go sürümü bilgisi + go env // Go ile alakalı ortam değişkenleri + go list // yüklü paketlerin listesi + go run // paketi geçiçi olarak derleyip çalıştırma + +Go komutlarınin kendi dökümantasyonunda daha ayrıntılı bilgi bulabilirsiniz. `go help ` ile bu bilgilere erişebilirsiniz. + +## Linkler + +- [İçerik](preface.md) +- Önceki bölüm: [$GOPATH ve çalışma ortamı](01.2.md) +- Sonraki bölüm: [Go geliştirme araçları](01.4.md) diff --git a/tr/README.md b/tr/README.md new file mode 100644 index 00000000..96dbd1e3 --- /dev/null +++ b/tr/README.md @@ -0,0 +1,37 @@ +***Go ile Web Uygulaması Geliştirme*** +====================================== + +### Amaç + +Çünkü web uygulamaları geliştirmek ile ilgileniyorum, boş zamanlarımı bu açık kaynaklı kitabı yazarak geçiriyorum. Tabi bu web uygulamaları geliştirmede çok iyi olduğumu göstermiyor; web uygulaması geliştirirken Go ile neler yaptığı paylaşmak istiyorum. + +- PHP/Python/Ruby ile çalışalanlar, Go ile nasıl web uygulaması geliştirilir öğreneceksiniz. +- C/C++ çalışılanlar, internetin nasıl çalıştığını öğreneceksiniz. + +Ben, öğrenmenin asıl amacının paylaşmak olduğunu düşünüyorum. Hayatta beni en çok mutlu eden şey, bildiklerimi diğer insanlarla paylaşmak. + +# Bağış + +AliPay: alipay + +English Donate:[donate](http://beego.me/donate) + +## Topluluk +QQ群:386056972 + +BBS:[http://golanghome.com/](http://golanghome.com/) + +### Bilgilendirme + + - [四月份平民 April Citizen](https://plus.google.com/110445767383269817959) (review code) + - [洪瑞琦 Hong Ruiqi](https://github.com/hongruiqi) (review code) + - [边 疆 BianJiang](https://github.com/border) (write the configurations about Vim and Emacs for Go development) + - [欧林猫 Oling Cat](https://github.com/OlingCat)(review code) + - [吴文磊 Wenlei Wu](mailto:spadesacn@gmail.com)(provide some pictures) + - [北极星 Polaris](https://github.com/polaris1119)(review whole book) + - [雨 痕 Rain Trail](https://github.com/qyuhen)(review chapter 2 and 3) + +### Lisans + +Aksi belirtilmedikçe, kitap [CC BY-SA 3.0 License](http://creativecommons.org/licenses/by-sa/3.0/) ile, +kaynak kodlar ise [BSD 3-Clause License]() ile lisanslanmıştır. diff --git a/tr/images/1.1.cmd.png b/tr/images/1.1.cmd.png new file mode 100644 index 00000000..0df2504b Binary files /dev/null and b/tr/images/1.1.cmd.png differ diff --git a/tr/images/1.1.linux.png b/tr/images/1.1.linux.png new file mode 100644 index 00000000..539563d9 Binary files /dev/null and b/tr/images/1.1.linux.png differ diff --git a/tr/images/1.1.mac.png b/tr/images/1.1.mac.png new file mode 100644 index 00000000..ad2ceed6 Binary files /dev/null and b/tr/images/1.1.mac.png differ diff --git a/tr/images/1.3.go.png b/tr/images/1.3.go.png new file mode 100644 index 00000000..8155b2d5 Binary files /dev/null and b/tr/images/1.3.go.png differ diff --git a/tr/images/1.4.eclipse1.png b/tr/images/1.4.eclipse1.png new file mode 100644 index 00000000..5b2f10d8 Binary files /dev/null and b/tr/images/1.4.eclipse1.png differ diff --git a/tr/images/1.4.eclipse2.png b/tr/images/1.4.eclipse2.png new file mode 100644 index 00000000..55931f33 Binary files /dev/null and b/tr/images/1.4.eclipse2.png differ diff --git a/tr/images/1.4.eclipse3.png b/tr/images/1.4.eclipse3.png new file mode 100644 index 00000000..3c7bd634 Binary files /dev/null and b/tr/images/1.4.eclipse3.png differ diff --git a/tr/images/1.4.eclipse4.png b/tr/images/1.4.eclipse4.png new file mode 100644 index 00000000..d4ee77af Binary files /dev/null and b/tr/images/1.4.eclipse4.png differ diff --git a/tr/images/1.4.eclipse5.png b/tr/images/1.4.eclipse5.png new file mode 100644 index 00000000..8a89555d Binary files /dev/null and b/tr/images/1.4.eclipse5.png differ diff --git a/tr/images/1.4.eclipse6.png b/tr/images/1.4.eclipse6.png new file mode 100644 index 00000000..7771ec2e Binary files /dev/null and b/tr/images/1.4.eclipse6.png differ diff --git a/tr/images/1.4.emacs.png b/tr/images/1.4.emacs.png new file mode 100644 index 00000000..3dd6845f Binary files /dev/null and b/tr/images/1.4.emacs.png differ diff --git a/tr/images/1.4.idea1.png b/tr/images/1.4.idea1.png new file mode 100644 index 00000000..87d2e51e Binary files /dev/null and b/tr/images/1.4.idea1.png differ diff --git a/tr/images/1.4.idea2.png b/tr/images/1.4.idea2.png new file mode 100644 index 00000000..8059b20f Binary files /dev/null and b/tr/images/1.4.idea2.png differ diff --git a/tr/images/1.4.idea3.png b/tr/images/1.4.idea3.png new file mode 100644 index 00000000..574e1d74 Binary files /dev/null and b/tr/images/1.4.idea3.png differ diff --git a/tr/images/1.4.idea4.png b/tr/images/1.4.idea4.png new file mode 100644 index 00000000..f6e5138d Binary files /dev/null and b/tr/images/1.4.idea4.png differ diff --git a/tr/images/1.4.idea5.png b/tr/images/1.4.idea5.png new file mode 100644 index 00000000..7784a611 Binary files /dev/null and b/tr/images/1.4.idea5.png differ diff --git a/tr/images/1.4.liteide.png b/tr/images/1.4.liteide.png new file mode 100644 index 00000000..f28d755e Binary files /dev/null and b/tr/images/1.4.liteide.png differ diff --git a/tr/images/1.4.sublime1.png b/tr/images/1.4.sublime1.png new file mode 100644 index 00000000..60f2b3db Binary files /dev/null and b/tr/images/1.4.sublime1.png differ diff --git a/tr/images/1.4.sublime2.png b/tr/images/1.4.sublime2.png new file mode 100644 index 00000000..a888636f Binary files /dev/null and b/tr/images/1.4.sublime2.png differ diff --git a/tr/images/1.4.sublime3.png b/tr/images/1.4.sublime3.png new file mode 100644 index 00000000..8b2eb3dc Binary files /dev/null and b/tr/images/1.4.sublime3.png differ diff --git a/tr/images/1.4.sublime4.png b/tr/images/1.4.sublime4.png new file mode 100644 index 00000000..b0fef624 Binary files /dev/null and b/tr/images/1.4.sublime4.png differ diff --git a/tr/images/1.4.vim.png b/tr/images/1.4.vim.png new file mode 100644 index 00000000..27a15c05 Binary files /dev/null and b/tr/images/1.4.vim.png differ diff --git a/tr/images/13.1.flow.png b/tr/images/13.1.flow.png new file mode 100644 index 00000000..b47e5bfc Binary files /dev/null and b/tr/images/13.1.flow.png differ diff --git a/tr/images/13.1.gopath.png b/tr/images/13.1.gopath.png new file mode 100644 index 00000000..c948437a Binary files /dev/null and b/tr/images/13.1.gopath.png differ diff --git a/tr/images/13.1.gopath2.png b/tr/images/13.1.gopath2.png new file mode 100644 index 00000000..450b4104 Binary files /dev/null and b/tr/images/13.1.gopath2.png differ diff --git a/tr/images/13.4.beego.png b/tr/images/13.4.beego.png new file mode 100644 index 00000000..96a9d274 Binary files /dev/null and b/tr/images/13.4.beego.png differ diff --git a/tr/images/14.1.bootstrap.png b/tr/images/14.1.bootstrap.png new file mode 100644 index 00000000..13ab7f82 Binary files /dev/null and b/tr/images/14.1.bootstrap.png differ diff --git a/tr/images/14.1.bootstrap2.png b/tr/images/14.1.bootstrap2.png new file mode 100644 index 00000000..753ffc79 Binary files /dev/null and b/tr/images/14.1.bootstrap2.png differ diff --git a/tr/images/14.1.bootstrap3.png b/tr/images/14.1.bootstrap3.png new file mode 100644 index 00000000..460b8183 Binary files /dev/null and b/tr/images/14.1.bootstrap3.png differ diff --git a/tr/images/14.4.github.png b/tr/images/14.4.github.png new file mode 100644 index 00000000..4da4c6f5 Binary files /dev/null and b/tr/images/14.4.github.png differ diff --git a/tr/images/14.4.github2.png b/tr/images/14.4.github2.png new file mode 100644 index 00000000..c3ae04bf Binary files /dev/null and b/tr/images/14.4.github2.png differ diff --git a/tr/images/14.4.github3.png b/tr/images/14.4.github3.png new file mode 100644 index 00000000..e98768c3 Binary files /dev/null and b/tr/images/14.4.github3.png differ diff --git a/tr/images/14.6.pprof.png b/tr/images/14.6.pprof.png new file mode 100644 index 00000000..532f1a76 Binary files /dev/null and b/tr/images/14.6.pprof.png differ diff --git a/tr/images/14.6.pprof2.png b/tr/images/14.6.pprof2.png new file mode 100644 index 00000000..610c93a4 Binary files /dev/null and b/tr/images/14.6.pprof2.png differ diff --git a/tr/images/14.6.pprof3.png b/tr/images/14.6.pprof3.png new file mode 100644 index 00000000..a3b9f7ba Binary files /dev/null and b/tr/images/14.6.pprof3.png differ diff --git a/tr/images/2.2.array.png b/tr/images/2.2.array.png new file mode 100644 index 00000000..5560023b Binary files /dev/null and b/tr/images/2.2.array.png differ diff --git a/tr/images/2.2.basic.png b/tr/images/2.2.basic.png new file mode 100644 index 00000000..9bac6a0f Binary files /dev/null and b/tr/images/2.2.basic.png differ diff --git a/tr/images/2.2.makenew.png b/tr/images/2.2.makenew.png new file mode 100644 index 00000000..00f74179 Binary files /dev/null and b/tr/images/2.2.makenew.png differ diff --git a/tr/images/2.2.slice.png b/tr/images/2.2.slice.png new file mode 100644 index 00000000..119f2141 Binary files /dev/null and b/tr/images/2.2.slice.png differ diff --git a/tr/images/2.2.slice2.png b/tr/images/2.2.slice2.png new file mode 100644 index 00000000..0729a1bf Binary files /dev/null and b/tr/images/2.2.slice2.png differ diff --git a/tr/images/2.3.init.png b/tr/images/2.3.init.png new file mode 100644 index 00000000..abe7cfad Binary files /dev/null and b/tr/images/2.3.init.png differ diff --git a/tr/images/2.4.student_struct.png b/tr/images/2.4.student_struct.png new file mode 100644 index 00000000..7c4f87ac Binary files /dev/null and b/tr/images/2.4.student_struct.png differ diff --git a/tr/images/2.5.rect_func_without_receiver.png b/tr/images/2.5.rect_func_without_receiver.png new file mode 100644 index 00000000..b4b571fd Binary files /dev/null and b/tr/images/2.5.rect_func_without_receiver.png differ diff --git a/tr/images/2.5.shapes_func_with_receiver_cp.png b/tr/images/2.5.shapes_func_with_receiver_cp.png new file mode 100644 index 00000000..2d26a01d Binary files /dev/null and b/tr/images/2.5.shapes_func_with_receiver_cp.png differ diff --git a/tr/images/2.5.shapes_func_without_receiver.png b/tr/images/2.5.shapes_func_without_receiver.png new file mode 100644 index 00000000..112f56fc Binary files /dev/null and b/tr/images/2.5.shapes_func_without_receiver.png differ diff --git a/tr/images/3.1.dns2.png b/tr/images/3.1.dns2.png new file mode 100644 index 00000000..f432edf3 Binary files /dev/null and b/tr/images/3.1.dns2.png differ diff --git a/tr/images/3.1.dns_hierachy.png b/tr/images/3.1.dns_hierachy.png new file mode 100644 index 00000000..8dfeb232 Binary files /dev/null and b/tr/images/3.1.dns_hierachy.png differ diff --git a/tr/images/3.1.dns_inquery.png b/tr/images/3.1.dns_inquery.png new file mode 100644 index 00000000..b95d952e Binary files /dev/null and b/tr/images/3.1.dns_inquery.png differ diff --git a/tr/images/3.1.http.png b/tr/images/3.1.http.png new file mode 100644 index 00000000..25108bf3 Binary files /dev/null and b/tr/images/3.1.http.png differ diff --git a/tr/images/3.1.httpPOST.png b/tr/images/3.1.httpPOST.png new file mode 100644 index 00000000..31d02020 Binary files /dev/null and b/tr/images/3.1.httpPOST.png differ diff --git a/tr/images/3.1.response.png b/tr/images/3.1.response.png new file mode 100644 index 00000000..978de790 Binary files /dev/null and b/tr/images/3.1.response.png differ diff --git a/tr/images/3.1.web.png b/tr/images/3.1.web.png new file mode 100644 index 00000000..5b98b5dc Binary files /dev/null and b/tr/images/3.1.web.png differ diff --git a/tr/images/3.1.web2.png b/tr/images/3.1.web2.png new file mode 100644 index 00000000..a604c217 Binary files /dev/null and b/tr/images/3.1.web2.png differ diff --git a/tr/images/3.2.goweb.png b/tr/images/3.2.goweb.png new file mode 100644 index 00000000..d6a53829 Binary files /dev/null and b/tr/images/3.2.goweb.png differ diff --git a/tr/images/3.3.http.png b/tr/images/3.3.http.png new file mode 100644 index 00000000..40137e33 Binary files /dev/null and b/tr/images/3.3.http.png differ diff --git a/tr/images/3.3.illustrator.png b/tr/images/3.3.illustrator.png new file mode 100644 index 00000000..8159b8bb Binary files /dev/null and b/tr/images/3.3.illustrator.png differ diff --git a/tr/images/4.1.login.png b/tr/images/4.1.login.png new file mode 100644 index 00000000..dfca39df Binary files /dev/null and b/tr/images/4.1.login.png differ diff --git a/tr/images/4.1.slice.png b/tr/images/4.1.slice.png new file mode 100644 index 00000000..3405c147 Binary files /dev/null and b/tr/images/4.1.slice.png differ diff --git a/tr/images/4.3.escape.png b/tr/images/4.3.escape.png new file mode 100644 index 00000000..76ce1245 Binary files /dev/null and b/tr/images/4.3.escape.png differ diff --git a/tr/images/4.4.token.png b/tr/images/4.4.token.png new file mode 100644 index 00000000..b52cc1d1 Binary files /dev/null and b/tr/images/4.4.token.png differ diff --git a/tr/images/4.5.upload.png b/tr/images/4.5.upload.png new file mode 100644 index 00000000..e5766e38 Binary files /dev/null and b/tr/images/4.5.upload.png differ diff --git a/tr/images/4.5.upload2.png b/tr/images/4.5.upload2.png new file mode 100644 index 00000000..06460446 Binary files /dev/null and b/tr/images/4.5.upload2.png differ diff --git a/tr/images/5.6.mongodb.png b/tr/images/5.6.mongodb.png new file mode 100644 index 00000000..6161fbe5 Binary files /dev/null and b/tr/images/5.6.mongodb.png differ diff --git a/tr/images/6.1.cookie.png b/tr/images/6.1.cookie.png new file mode 100644 index 00000000..b94559cf Binary files /dev/null and b/tr/images/6.1.cookie.png differ diff --git a/tr/images/6.1.cookie2.png b/tr/images/6.1.cookie2.png new file mode 100644 index 00000000..2888e392 Binary files /dev/null and b/tr/images/6.1.cookie2.png differ diff --git a/tr/images/6.1.session.png b/tr/images/6.1.session.png new file mode 100644 index 00000000..f538b8f5 Binary files /dev/null and b/tr/images/6.1.session.png differ diff --git a/tr/images/6.4.cookie.png b/tr/images/6.4.cookie.png new file mode 100644 index 00000000..0dad93f1 Binary files /dev/null and b/tr/images/6.4.cookie.png differ diff --git a/tr/images/6.4.hijack.png b/tr/images/6.4.hijack.png new file mode 100644 index 00000000..5ab0753f Binary files /dev/null and b/tr/images/6.4.hijack.png differ diff --git a/tr/images/6.4.hijacksuccess.png b/tr/images/6.4.hijacksuccess.png new file mode 100644 index 00000000..57f48d41 Binary files /dev/null and b/tr/images/6.4.hijacksuccess.png differ diff --git a/tr/images/6.4.setcookie.png b/tr/images/6.4.setcookie.png new file mode 100644 index 00000000..dbb52170 Binary files /dev/null and b/tr/images/6.4.setcookie.png differ diff --git a/tr/images/7.4.template.png b/tr/images/7.4.template.png new file mode 100644 index 00000000..195e24fb Binary files /dev/null and b/tr/images/7.4.template.png differ diff --git a/tr/images/8.1.socket.png b/tr/images/8.1.socket.png new file mode 100644 index 00000000..93dd544d Binary files /dev/null and b/tr/images/8.1.socket.png differ diff --git a/tr/images/8.2.websocket.png b/tr/images/8.2.websocket.png new file mode 100644 index 00000000..b293c653 Binary files /dev/null and b/tr/images/8.2.websocket.png differ diff --git a/tr/images/8.2.websocket2.png b/tr/images/8.2.websocket2.png new file mode 100644 index 00000000..b744c634 Binary files /dev/null and b/tr/images/8.2.websocket2.png differ diff --git a/tr/images/8.2.websocket3.png b/tr/images/8.2.websocket3.png new file mode 100644 index 00000000..ee769c16 Binary files /dev/null and b/tr/images/8.2.websocket3.png differ diff --git a/tr/images/8.3.rest.png b/tr/images/8.3.rest.png new file mode 100644 index 00000000..0c1e5b54 Binary files /dev/null and b/tr/images/8.3.rest.png differ diff --git a/tr/images/8.3.rest2.png b/tr/images/8.3.rest2.png new file mode 100644 index 00000000..b43c0804 Binary files /dev/null and b/tr/images/8.3.rest2.png differ diff --git a/tr/images/8.3.rest3.png b/tr/images/8.3.rest3.png new file mode 100644 index 00000000..1f62b505 Binary files /dev/null and b/tr/images/8.3.rest3.png differ diff --git a/tr/images/8.4.rpc.png b/tr/images/8.4.rpc.png new file mode 100644 index 00000000..0b3fcfe2 Binary files /dev/null and b/tr/images/8.4.rpc.png differ diff --git a/tr/images/9.1.csrf.png b/tr/images/9.1.csrf.png new file mode 100644 index 00000000..54d3a434 Binary files /dev/null and b/tr/images/9.1.csrf.png differ diff --git a/tr/images/cover.png b/tr/images/cover.png new file mode 100644 index 00000000..22bfab44 Binary files /dev/null and b/tr/images/cover.png differ diff --git a/tr/images/ebook.jpg b/tr/images/ebook.jpg new file mode 100644 index 00000000..b2f3710d Binary files /dev/null and b/tr/images/ebook.jpg differ diff --git a/tr/images/navi1.png b/tr/images/navi1.png new file mode 100644 index 00000000..92a7669e Binary files /dev/null and b/tr/images/navi1.png differ diff --git a/tr/images/navi10.png b/tr/images/navi10.png new file mode 100644 index 00000000..94935e27 Binary files /dev/null and b/tr/images/navi10.png differ diff --git a/tr/images/navi11.png b/tr/images/navi11.png new file mode 100644 index 00000000..8eb93cb1 Binary files /dev/null and b/tr/images/navi11.png differ diff --git a/tr/images/navi12.png b/tr/images/navi12.png new file mode 100644 index 00000000..5bdbadfa Binary files /dev/null and b/tr/images/navi12.png differ diff --git a/tr/images/navi13.png b/tr/images/navi13.png new file mode 100644 index 00000000..c797033b Binary files /dev/null and b/tr/images/navi13.png differ diff --git a/tr/images/navi14.png b/tr/images/navi14.png new file mode 100644 index 00000000..3d9d38cc Binary files /dev/null and b/tr/images/navi14.png differ diff --git a/tr/images/navi2.png b/tr/images/navi2.png new file mode 100644 index 00000000..d18526ac Binary files /dev/null and b/tr/images/navi2.png differ diff --git a/tr/images/navi3.png b/tr/images/navi3.png new file mode 100644 index 00000000..23495893 Binary files /dev/null and b/tr/images/navi3.png differ diff --git a/tr/images/navi4.png b/tr/images/navi4.png new file mode 100644 index 00000000..1b4df73a Binary files /dev/null and b/tr/images/navi4.png differ diff --git a/tr/images/navi5.png b/tr/images/navi5.png new file mode 100644 index 00000000..55788152 Binary files /dev/null and b/tr/images/navi5.png differ diff --git a/tr/images/navi6.png b/tr/images/navi6.png new file mode 100644 index 00000000..74cab817 Binary files /dev/null and b/tr/images/navi6.png differ diff --git a/tr/images/navi7.png b/tr/images/navi7.png new file mode 100644 index 00000000..2e1c974e Binary files /dev/null and b/tr/images/navi7.png differ diff --git a/tr/images/navi8.png b/tr/images/navi8.png new file mode 100644 index 00000000..7a52d84e Binary files /dev/null and b/tr/images/navi8.png differ diff --git a/tr/images/navi9.png b/tr/images/navi9.png new file mode 100644 index 00000000..7692e113 Binary files /dev/null and b/tr/images/navi9.png differ diff --git a/tr/images/polling.png b/tr/images/polling.png new file mode 100644 index 00000000..8bd128ec Binary files /dev/null and b/tr/images/polling.png differ diff --git a/tr/preface.md b/tr/preface.md new file mode 100644 index 00000000..c502e84c --- /dev/null +++ b/tr/preface.md @@ -0,0 +1,96 @@ +- 1.[Go ortam yapılandırması](01.0.md) + - 1.1. [Kurulum](01.1.md) + - 1.2. [$GOPATH ve çalışma ortamı](01.2.md) + - 1.3. [Go komutları](01.3.md) + - 1.4. [Go geliştirme araçları](01.4.md) + - 1.5. [Özet](01.5.md) +- 2.[Temel Go bilgisi](02.0.md) + - 2.1. ["Hello, Go"](02.1.md) + - 2.2. [Go temelleri](02.2.md) + - 2.3. [Kontrol yapıları ve fonksiyonlar](02.3.md) + - 2.4. [struct](02.4.md) + - 2.5. [Nesne-Yönelim](02.5.md) + - 2.6. [interface](02.6.md) + - 2.7. [Aynıandalık](02.7.md) + - 2.8. [Özet](02.8.md) +- 3.[Web temelleri ](03.0.md) + - 3.1. [Web'in çalışma prensipleri](03.1.md) + - 3.2. [Basit bir web sunucu oluşturma](03.2.md) + - 3.3. [Go, Web'le nasıl çalışıyor](03.3.md) + - 3.4. [Http paketine giriş](03.4.md) + - 3.5. [Özet](03.5.md) +- 4.[Kullanıcı formu](04.0.md) + - 4.1. [Form girdilerini işleme](04.1.md) + - 4.2. [Girdilerin doğrulanması](04.2.md) + - 4.3. [Cross site scripting](04.3.md) + - 4.4. [Duplicate submissions](04.4.md) + - 4.5. [Dosya yükleme](04.5.md) + - 4.6. [Özet](04.6.md) +- 5.[Veritabanı](05.0.md) + - 5.1. [veritabanı/sql arayüzü](05.1.md) + - 5.2. [MySQL](05.2.md) + - 5.3. [SQLite](05.3.md) + - 5.4. [PostgreSQL](05.4.md) + - 5.5. [Beedb ile ORM tabanlı geliştirme](05.5.md) + - 5.6. [NoSQL veritabanı](05.6.md) + - 5.7. [Özet](05.7.md) +- 6.[Veri depolama ve oturumlar](06.0.md) + - 6.1. [Oturumlar ve çerezler(Session - Cookie)](06.1.md) + - 6.2. [Oturumlar Go'da nasıl kullanılıyor](06.2.md) + - 6.3. [Oturumları sakalama](06.3.md) + - 6.4. [Oturum çalınmasını engelleme](06.4.md) + - 6.5. [Özet](06.5.md) +- 7.[Metin dosyaları](07.0.md) + - 7.1. [XML](07.1.md) + - 7.2. [JSON](07.2.md) + - 7.3. [Regexp](07.3.md) + - 7.4. [Şablonlar](07.4.md) + - 7.5. [Dosyalar](07.5.md) + - 7.6. [Dzigiler](07.6.md) + - 7.7. [Özet](07.7.md) +- 8.[Web servisleri](08.0.md) + - 8.1. [Soketler](08.1.md) + - 8.2. [WebSocket](08.2.md) + - 8.3. [REST](08.3.md) + - 8.4. [RPC](08.4.md) + - 8.5. [Özet](08.5.md) +- 9.[Güvenlik ve şifreleme](09.0.md) + - 9.1. [CSRF saldırıları](09.1.md) + - 9.2. [Girdi filtreleme](09.2.md) + - 9.3. [XSS saldırıları](09.3.md) + - 9.4. [SQL enjeksiyonu](09.4.md) + - 9.5. [Şifre saklama](09.5.md) + - 9.6. [Veri şifreleme ve çözme](09.6.md) + - 9.7. [Özet](09.7.md) +- 10.[Uluslararasılaştırma ve yerelleştirme](10.0.md) + - 10.1 [Zaman dilimi](10.1.md) + - 10.2 [Yerelleştirilmiş kaynaklar](10.2.md) + - 10.3 [Uluslararası siteler](10.3.md) + - 10.4 [Özet](10.4.md) +- 11.[Hata yakalama, hata ayıklama ve test etme](11.0.md) + - 11.1. [Hata yakalama](11.1.md) + - 11.2. [GDB kullanarak hata ayıklama](11.2.md) + - 11.3. [Test durumları yazmak](11.3.md) + - 11.4. [Özet](11.4.md) +- 12.[Yaylınlama ve Bakım](12.0.md) + - 12.1. [Loglar](12.1.md) + - 12.2. [Hatalar ve Çökmeler](12.2.md) + - 12.3. [Yayınlama](12.3.md) + - 12.4. [Yedek ve geri dönüştürme](12.4.md) + - 12.5. [Özet](12.5.md) +- 13.[Web Çatısı oluşturmak](13.0.md) + - 13.1. [Proje Programı](13.1.md) + - 13.2. [Yönlendirici ayarları](13.2.md) + - 13.3. [Controller tasarlamak](13.3.md) + - 13.4. [Loglar ve yapılandırmalar](13.4.md) + - 13.5. [Blog ekleme, silme ve güncelleme](13.5.md) + - 13.6. [Özet](13.6.md) +- 14.[Web Çatısı tasarlama](14.0.md) + - 14.1. [Statik dosyalar](14.1.md) + - 14.2. [Session](14.2.md) + - 14.3. [Form](14.3.md) + - 14.4. [Kullanıcı validasyonu](14.4.md) + - 14.5. [Çoklu dil desteği](14.5.md) + - 14.6. [pprof](14.6.md) + - 14.7. [Özet](14.7.md) +- Ek: [Referanslar](ref.md) \ No newline at end of file diff --git a/zh/08.3.md b/zh/08.3.md index e18873f8..233fb7f6 100644 --- a/zh/08.3.md +++ b/zh/08.3.md @@ -60,7 +60,7 @@ Go没有为REST提供直接支持,但是因为RESTful是基于HTTP协议实现 - 有些防火墙会挡住HTTP `PUT`和`DELETE`请求要绕过这个限制,客户端需要把实际的`PUT`和`DELETE`请求通过 POST 请求穿透过来。RESTful 服务则要负责在收到的 POST 请求中找到原始的 HTTP 方法并还原。 -我们现在可以通过`POST`里面增加隐藏字段`_method`这种方式可以来模拟`PUT`、`DELETE`等方式,但是服务器端需要做转换。我现在的项目里面就按照这种方式来做的REST接口。当然Go语言里面完全按照RSETful来实现是很容易的,我们通过下面的例子来说明如何实现RESTful的应用设计。 +我们现在可以通过`POST`里面增加隐藏字段`_method`这种方式可以来模拟`PUT`、`DELETE`等方式,但是服务器端需要做转换。我现在的项目里面就按照这种方式来做的REST接口。当然Go语言里面完全按照RESTful来实现是很容易的,我们通过下面的例子来说明如何实现RESTful的应用设计。 package main diff --git a/zh/build-web-application-with-golang.epub b/zh/build-web-application-with-golang.epub new file mode 100644 index 00000000..bc463b43 Binary files /dev/null and b/zh/build-web-application-with-golang.epub differ diff --git a/zh/build.sh b/zh/build.sh index 58586561..4f4f7a76 100755 --- a/zh/build.sh +++ b/zh/build.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash SED='sed'