From a214736566671fbf87809a7f228cf8f1189ee083 Mon Sep 17 00:00:00 2001 From: KirillMerz Date: Mon, 21 Jun 2021 22:01:42 +0700 Subject: [PATCH] Fix typos and punctuation errors --- ru/01.1.md | 2 +- ru/01.3.md | 8 ++++---- ru/01.4.md | 8 ++++---- ru/02.0.md | 6 +++--- ru/02.1.md | 10 +++++----- ru/02.2.md | 8 ++++---- ru/02.4.md | 2 +- ru/02.6.md | 2 +- ru/02.7.md | 2 +- ru/03.0.md | 4 ++-- ru/03.1.md | 10 +++++----- ru/03.2.md | 2 +- ru/03.3.md | 10 +++++----- ru/03.4.md | 6 +++--- ru/03.5.md | 2 +- ru/04.0.md | 4 ++-- ru/04.1.md | 2 +- ru/04.3.md | 2 +- ru/04.5.md | 4 ++-- ru/04.6.md | 2 +- ru/05.0.md | 4 ++-- ru/05.1.md | 4 ++-- ru/05.2.md | 2 +- ru/05.3.md | 2 +- ru/05.4.md | 2 +- ru/06.0.md | 6 +++--- 26 files changed, 58 insertions(+), 58 deletions(-) diff --git a/ru/01.1.md b/ru/01.1.md index b488a695..47a9254b 100644 --- a/ru/01.1.md +++ b/ru/01.1.md @@ -78,7 +78,7 @@ ### Linux -Зайдите на [страницу загрузки](https://golang.org/dl/), выберите `go1.4.2.linux-386.tar.gz` для 32-битных систем или `go1.4.2.linux-amd64.tar.gz` для 64-битных. Предположим, Вы хотите установить Go в каталог `$GO_INSTALL_DIR`. Распакуйте `tar.gz` в этот каталог командой `tar zxvf go1.4.2.linux-amd64.tar.gz -C $GO_INSTALL_DIR`. Затем измените прееменную $PATH следующим образом: `export PATH=$PATH:$GO_INSTALL_DIR/go/bin`. Теперь откройте терминал и напечатайте `go`. Вы должны увидеть то же, что показано на рисунке 1.1. +Зайдите на [страницу загрузки](https://golang.org/dl/), выберите `go1.4.2.linux-386.tar.gz` для 32-битных систем или `go1.4.2.linux-amd64.tar.gz` для 64-битных. Предположим, Вы хотите установить Go в каталог `$GO_INSTALL_DIR`. Распакуйте `tar.gz` в этот каталог командой `tar zxvf go1.4.2.linux-amd64.tar.gz -C $GO_INSTALL_DIR`. Затем измените переменную $PATH следующим образом: `export PATH=$PATH:$GO_INSTALL_DIR/go/bin`. Теперь откройте терминал и напечатайте `go`. Вы должны увидеть то же, что показано на рисунке 1.1. ### Windows diff --git a/ru/01.3.md b/ru/01.3.md index 3e10e18c..251f9a52 100644 --- a/ru/01.3.md +++ b/ru/01.3.md @@ -19,7 +19,7 @@ - Если в каталоге много файлов, но Вы хотите скомпилировать только один, Вам нужно добавить имя файла после `go build`. Например, `go build a.go`. Просто `go build` скомпилирует все файлы в каталоге. - Вы также можете указать имя исполняемого файла, который будет создан. Например, в проекте `mathapp` (раздел 1.2), команда `go build -o astaxie.exe` создаст `astaxie.exe` вместо `mathapp.exe`. Именем по умолчанию для исполняемого файла является имя каталога (если пакет не main) или название первого файла-исходника (если пакет - main). -(Согласно [The Go Programming Language Specification](https://golang.org/ref/spec) имя пакета должно следовать после слова `package` в первой строке исходного файла. Оно не обязательно должно быть таким же, как имя каталога, и имя исполняемого файла по умлочанию будет таким же, как и имя каталога.) +(Согласно [Спецификации Языка Программирования Go](https://golang.org/ref/spec) имя пакета должно следовать после слова `package` в первой строке исходного файла. Оно не обязательно должно быть таким же, как имя каталога, и имя исполняемого файла по умолчанию будет таким же, как и имя каталога.) - `go build` не работает с файлами, имя которых начинается на `_` или `.`. - Если Вам нужно несколько исходных файлов для каждой операционной системы, Вы можете в конце каждого имени файла добавить соответствующий суффикс ОС. Предположим, имеется несколько файлов для загрузки массивов. Можно назвать их следующим образом: @@ -55,7 +55,7 @@ ## go get -Эта команда служит для установки удаленных пакетов. На данный момент она поддерживает BitBucket, GitHub, Google Code и Launchpad. При запуске этой команды происходят вещи: первая - Go скачивает исходники пакетов, вторая - исполняется `go install`. Перед использованием этой команды убедитесь, что у Вас установлены соответствующие инструменты: +Эта команда служит для установки удаленных пакетов. На данный момент она поддерживает BitBucket, GitHub, Google Code и Launchpad. При запуске этой команды происходят следующие вещи: первая - Go скачивает исходники пакетов, вторая - исполняется `go install`. Перед использованием этой команды убедитесь, что у Вас установлены соответствующие инструменты: BitBucket (Mercurial Git) GitHub (git) @@ -81,11 +81,11 @@ ## godoc -Многие говорят, что никакая сторонняя документация для программирования на Go не нужна (вообще я одну сделал - [CHM](https://github.com/astaxie/godoc)). В Go существует мощная утилита для того, чтобы управлять документацией "из коробки". +Многие говорят, что никакая сторонняя документация для программирования на Go не нужна (вообще, я одну сделал - [CHM](https://github.com/astaxie/godoc)). В Go существует мощная утилита для того, чтобы управлять документацией "из коробки". Итак, как мы можем ознакомиться с информацией о пакете в документации? Например, если Вы хотите получить подробную информацию о пакете `builtin`, используйте команду `godoc builtin`. Подобным образом Вы можете воспользоваться `godoc net/http` для того, чтобы ознакомиться с документацией по пакету `http`. Если Вам нужно больше деталей об отдельных функциях, выполните `godoc fmt Printf` и `godoc -src fmt Printf`, чтобы увидеть исходный код функции . -Выполните `godoc -http=:8080`, затем откройте в браузере `127.0.0.1:8080`. Вы должны увидеть локальную версию сайта golang.org. Он покажет не только информацию о стандартных пакетах, но также о пакетах в Вашем `$GOPATH/pkg`. Это здорово для людей, которые страдают от Великого Китайского Файерволла. +Выполните `godoc -http=:8080`, затем откройте в браузере `127.0.0.1:8080`. Вы должны увидеть локальную версию сайта golang.org. Она покажет не только информацию о стандартных пакетах, но также о пакетах в Вашем `$GOPATH/pkg`. Это здорово для людей, которые страдают от Великого Китайского Файерволла. ## Другие утилиты diff --git a/ru/01.4.md b/ru/01.4.md index ce08f584..5bccdd1b 100644 --- a/ru/01.4.md +++ b/ru/01.4.md @@ -1,10 +1,10 @@ # 1.4 Инструменты разработки для Go -В этом разделе я ознакомлю Вас с несколькими средами разработки (IDE), которые помогут Вам более эффективно программировать. Они обладают такими возможностями как умное автодополнение и автоформатирование. Все они кроссплатформенные, поэтому шаги по настройке, которые я покажу, не будут слишком отличаться в зависимости от операционной системы, которую Вы используете. +В этом разделе я ознакомлю Вас с несколькими средами разработки (IDE), которые помогут Вам более эффективно программировать. Они обладают такими возможностями, как умное автодополнение и автоформатирование. Все они кроссплатформенные, поэтому шаги по настройке, которые я покажу, не будут слишком отличаться в зависимости от операционной системы, которую Вы используете. ## LiteIDE -LiteIDE - нетребовательный к ресурсам системы IDE с открытым исходным кодом, который предназначен для разработки проектов только на Go. Он разработан visualfc. +LiteIDE - нетребовательная к ресурсам системы IDE с открытым исходным кодом, которая предназначена для разработки проектов только на Go. Она разработана visualfc. ![](images/1.4.liteide.png?raw=true) @@ -20,7 +20,7 @@ LiteIDE - нетребовательный к ресурсам системы ID - Поддерживает разные среды компиляции - Поддерживает кросс-компиляцию проектов на Go - Управление проектами - - Представление досументации основано на $GOPATH + - Представление документации основано на $GOPATH - Система компиляции основана на $GOPATH - Документация API основана на $GOPATH - Редактор исходного кода Go @@ -48,7 +48,7 @@ LiteIDE - нетребовательный к ресурсам системы ID - Установите LiteIDE: - [Страница загрузки](http://code.google.com/p/golangide) - - [Исходные коды](https://github.com/visualfc/liteide) + - [Исходный код](https://github.com/visualfc/liteide) Сначала установите Go, затем скачайте версию LiteIDE, соответствующую Вашей операционной системе. Распакуйте скачанный пакет. diff --git a/ru/02.0.md b/ru/02.0.md index b34727ab..62a53a4a 100644 --- a/ru/02.0.md +++ b/ru/02.0.md @@ -1,6 +1,6 @@ -# 2 Введение в Go +# 2. Введение в Go -Go - компилируемый системный язык программирования, и он относится к С-подобным языкам. Однако, скорость его компиляции намного выше. Он имеет всего 25 ключевых слов... даже меньше чем букв в английском алфавите! Давайте взглянем на эти ключевые слова прежде чем мы начнем. +Go - компилируемый системный язык программирования, и он относится к С-подобным языкам. Однако, скорость его компиляции намного выше. Он имеет всего 25 ключевых слов... даже меньше, чем букв в английском алфавите! Давайте взглянем на эти ключевые слова прежде, чем мы начнем. break default func interface select case defer go map struct @@ -8,7 +8,7 @@ Go - компилируемый системный язык программир const fallthrough if range type continue for import return var -В этой главе, я собираюсь научить вас основам Go. Вы обнаружите, насколько лаконичен язык Go, и как превосходна его архитектура. Программирование на Go может быть по-настоящему веселым. После того, как вы закончите эту главу, вы будете знакомы с упомянутыми ключевыми словами. +В этой главе я собираюсь научить вас основам Go. Вы увидите, насколько лаконичен язык Go, и как превосходна его архитектура. Программирование на Go может быть по-настоящему веселым. После того, как вы закончите эту главу, вы будете знакомы с упомянутыми ключевыми словами. ## Ссылки diff --git a/ru/02.1.md b/ru/02.1.md index 744d61ee..87a42de8 100644 --- a/ru/02.1.md +++ b/ru/02.1.md @@ -1,6 +1,6 @@ # 2.1 Привет, Go -Прежде чем мы начнем конструировать приложение на Go, нам необходимо научиться писать простые программы. Вы не сможете построить здание, не узнав, сперва, как проложить фундамент. Вследствие чего, в этом разделе мы изучим базовый синтакс для запуска простой программы. +Прежде, чем мы начнем конструировать приложение на Go, нам необходимо научиться писать простые программы. Вы не сможете построить здание, не узнав, сперва, как проложить фундамент. Вследствие чего, в этом разделе мы изучим базовый синтакс для запуска простой программы. ## Программа @@ -22,7 +22,7 @@ ## Объяснение -Во-первых программы в Go состоят из `package` (пакетов). +Во-первых, программы в Go состоят из `package` (пакетов). `package ` (В данном случае `package main`) говорит нам о том, что этот исходный файл принадлежит к `main` пакету. А ключевое слово `main`, что данный пакет должен компилироваться в программу, а не в пакет файлов с расширением `.a`. @@ -31,11 +31,11 @@ Чтобы вывести `Hello, world…`, мы вызвали функцию `Printf`. Эта функция находится в пакете `fmt`, поэтому нам надо импортировать этот пакет, что мы и делаем в третьей строчке кода - `import "fmt"`. Пакеты в Go похожи на аналогичные в Python, вот несколько преимуществ пакетов: -Модульность (разбить программу на несколько модулей) и повторное использование (каждый модуль может быть использован во множестве программ). Сейчас мы просто рассмотрели общее представление пакетов, и чуть позже напишем свой собственный пакет. +Модульность (разбиение программы на несколько модулей) и повторное использование (каждый модуль может быть использован во множестве программ). Сейчас мы просто рассмотрели общее представление пакетов, и чуть позже напишем свой собственный пакет. В пятой строке мы использовали ключевое слово `func` для определения функции `main`. Тело функции находится внутри `{}`, прямо как в C, C++ и Java. -Как вы видите она не принимает ни один аргумент. Мы научимся писать функции, принимающие аргументы всего через минуту, а также функции которые не возвращают значение или возращают несколько. +Как вы видите, она не принимает ни один аргумент. Мы научимся писать функции, принимающие аргументы всего через минуту, а также функции которые не возвращают значение или возращают несколько. В шестой строке мы вызываем функцию `Printf`, которая находится в пакете `fmt`. Она была вызвана, используя синтаксис `.` (`<имя пакета>.<имя функции>`), в Python-стиле. @@ -45,7 +45,7 @@ ## Заключение -Go использует `package` (пакет) для структурирования программ. Функция `main.main()` (эта функция находится в пакете `main`) входной пункт каждой программы. Go поддерживает стандарт UTF-8, так как один из создателей Go является также одним из создателей UTF-8, так что Go поддерживает множество языков с самого рождения. +Go использует `package` (пакет) для структурирования программ. Функция `main.main()` (эта функция находится в пакете `main`) - входной пункт каждой программы. Go поддерживает стандарт UTF-8, так как один из создателей Go является также одним из создателей UTF-8, так что Go поддерживает множество языков с самого рождения. ## Ссылки diff --git a/ru/02.2.md b/ru/02.2.md index 53335c4a..5f085961 100644 --- a/ru/02.2.md +++ b/ru/02.2.md @@ -51,7 +51,7 @@ _, b := 34, 35 -Если Вы определили переменную и не использовали ее нигде в своей программе, компилятор покажет Вам ошибку компиляции. Попробуйте откомпилировать следующий код и посмотрите, что будет: +Если Вы определили переменную и не использовали ее нигде в своей программе, компилятор покажет Вам ошибку компиляции. Попробуйте скомпилировать следующий код и посмотрите, что будет: package main @@ -105,7 +105,7 @@ Хотя int32 длиннее int8 и является тем же типом, что и int, нельзя использовать их в одним выражении. ( ***'c' здесь будет определена как переменная типа `int`*** ) -К типам с плавающей точкой относятся `float32` и `float64`; типа, называемого `float` в Go нет. `float64` используется по умолчанию при коротком объявлении. +К типам с плавающей точкой относятся `float32` и `float64`; типа, называемого `float`, в Go нет. `float64` используется по умолчанию при коротком объявлении. Это все? Нет! Go также поддерживает и комплексные числа. `complex128` (с 64-битной вещественной и 64-битной мнимыми частями) является комплексным числом по умолчанию, а если Вам нужны числа поменьше, есть `complex64` (с 32-битной вещественной и 32-битной нмимыми частями). Числа представлены в форме `RE+IMi`, где `RE` - вещественная часть, а `IM` - мнимая, последнее `i` - мнимая единица. Вот пример комплексного числа: @@ -115,7 +115,7 @@ ### Строки -Мы уже говорили о том, как Go использует кодировку UTF-8. Строки представлены двойными кавычками `""` или обратными кавычками ``` `` ```. +Мы уже говорили о том, что Go использует кодировку UTF-8. Строки представлены двойными кавычками `""` или обратными кавычками ``` `` ```. // Пример кода var frenchHello string // основная форма определения строки @@ -398,7 +398,7 @@ // Задаем карте начальное значение rating := map[string]float32 {"C":5, "Go":4.5, "Python":4.5, "C++":2 } - // карта возвращает два значения. В качестве второго, если элемента с таким ключом не существует, 'ok' возвращает 'false', иначе - 'true'. + // карта возвращает два значения. В качестве второго, если элемента с таким ключом не существует, 'ok' принимает значение 'false', иначе - 'true'. csharpRating, ok := rating["C#"] if ok { fmt.Println("C# находится в карте, его рейтинг - ", csharpRating) diff --git a/ru/02.4.md b/ru/02.4.md index 5a94f1f0..97709031 100644 --- a/ru/02.4.md +++ b/ru/02.4.md @@ -9,7 +9,7 @@ type person struct { age int } ``` -Вот так как легко определять `структуру`! +Вот так легко определять `структуру`! У нас есть два поля: diff --git a/ru/02.6.md b/ru/02.6.md index 3209f201..ea20d4ca 100644 --- a/ru/02.6.md +++ b/ru/02.6.md @@ -367,7 +367,7 @@ type ReadWriter interface { t := reflect.TypeOf(i) // получает мета-данные типа i в переменную t v := reflect.ValueOf(i) // получает значение типа i в переменную v ``` -После этого мы может конвертировать типы, полученные в результате рефлексии, для того, чтобы получить нужные нам значения. +После этого мы можем конвертировать типы, полученные в результате рефлексии, для того, чтобы получить нужные нам значения. ```Go var x float64 = 3.4 v := reflect.ValueOf(x) diff --git a/ru/02.7.md b/ru/02.7.md index eee7041c..c5af95c3 100644 --- a/ru/02.7.md +++ b/ru/02.7.md @@ -91,7 +91,7 @@ runtime.Gosched() говорит процессору, что нужно исп ## Буферизованные каналы -Выше я говорил о небуферизованных каналах. В Go также есть буферизованные каналы, которые могут хранить больше, чем один элемент. Нарпимер, `ch := make(chan bool, 4)`, здесь мы создали канал, который может содержать 4 булевых элемента. Поэтому в этот канал мы можем послать до 4 булевых элементов, и горутина не заблокриуется, но она заблокируется, когда Вы попытаетесь послать в канал пятый элемент, и ни одна горутина его не примет. +Выше я говорил о небуферизованных каналах. В Go также есть буферизованные каналы, которые могут хранить больше, чем один элемент. Нарпимер, `ch := make(chan bool, 4)`, здесь мы создали канал, который может содержать 4 булевых элемента. Поэтому в этот канал мы можем послать до 4 булевых элементов, и горутина не заблокируется, но она заблокируется, когда Вы попытаетесь послать в канал пятый элемент, и ни одна горутина его не примет. ch := make(chan type, n) diff --git a/ru/03.0.md b/ru/03.0.md index 91baf4fb..ffe01c5c 100644 --- a/ru/03.0.md +++ b/ru/03.0.md @@ -1,6 +1,6 @@ -# 3 Основы Веба +# 3. Основы Веба -Основной причиной, по которой вы читаете эту книгу, является желание научиться создавать веб-приложения на языке Go. Как я уже говорил ранее, Go предоставляет много мощных пакетов, способных справляться с этой задачей, например пакет «http». Этот пакет поможет вам создавать web-приложения. Я объясню Вам все что вы должны знать о разработке веб-приложений в следующих главах, а сейчас мы поговорим о концепции Веба и о том как запускать веб-приложения в Go. +Основной причиной, по которой вы читаете эту книгу, является желание научиться создавать веб-приложения на языке Go. Как я уже говорил ранее, Go предоставляет много мощных пакетов, способных справляться с этой задачей, например пакет «http». Этот пакет поможет вам создавать web-приложения. Я объясню Вам все, что вы должны знать о разработке веб-приложений, в следующих главах, а сейчас мы поговорим о концепции Веба и о том, как запускать веб-приложения в Go. ## Ссылки diff --git a/ru/03.1.md b/ru/03.1.md index c0fa8d8f..680d9845 100644 --- a/ru/03.1.md +++ b/ru/03.1.md @@ -1,4 +1,4 @@ -# Принципы работы веб +# 3.1 Принципы работы веб Каждый раз, когда Вы открываете браузер, вводите URL-адрес и нажимаете клавишу enter, вы видите красивые веб-страницы на вашем экране. Но знаете ли вы, что стоит за этим простым действием? @@ -35,7 +35,7 @@ URL расшифровывается как Uniform Resource Locator, в пер <параметры> данные, которые будут отправлены на сервер <якорь> якорь -DNS-это аббревиатура  Domain Name System - система доменных имен. Это система имен для компьютерных сетевых служб , которая преобразует доменное имя в фактические IP-адреса (своеобразный переводчик). +DNS - это аббревиатура Domain Name System - система доменных имен. Это система имен для компьютерных сетевых служб, которая преобразует доменное имя в фактические IP-адреса (своеобразный переводчик). ![](images/3.1.dns_hierachy.png?raw=true) @@ -70,7 +70,7 @@ HTTP является протоколом независимой обработ ### HTTP запрос (информация о браузере) -Все пакеты запросов состоят из трех частей: строка запроса, заголовок запроса и тело запроса. Между заголовкам запроса и телом запроса идет одна пустая строка. +Все пакеты запросов состоят из трех частей: строка запроса, заголовок запроса и тело запроса. Между заголовком запроса и телом запроса идет одна пустая строка. GET /domains/example/ HTTP/1.1 // request line: request method, URL, protocol and its version Host:www.iana.org // имя домена @@ -106,7 +106,7 @@ POST помещает данные в теле запроса, поскольк Content-Type: text/html // тип данных ответа Transfer-Encoding: chunked // это означает, что данные были отправлены фрагментами Connection: keep-alive // сохранить подключение - Content-Length: 90 // длинна тела (размер) + Content-Length: 90 // длина тела (размер) // пустая строка -Эта форма отправит данные по адресу `/login` на сервер. После того, как пользователь нажем кнопку "Войти", данные будут посланы на хэндлер `login`, зарегистрированный маршрутизатором сервера. Нам нужно знать, какой метод используется при этом - POST или GET? +Эта форма отправит данные по адресу `/login` на сервер. После того, как пользователь нажмет кнопку "Войти", данные будут посланы на хэндлер `login`, зарегистрированный маршрутизатором сервера. Нам нужно знать, какой метод используется при этом - POST или GET? Это легко узнать при помощи пакета `http`. Давайте посмотрим, как обработать данные формы со страницы входа: diff --git a/ru/04.3.md b/ru/04.3.md index 5e9caf41..fb20343c 100644 --- a/ru/04.3.md +++ b/ru/04.3.md @@ -1,6 +1,6 @@ # 4.3 Межсайтовый скриптинг -Для совершенствования взаимодействия с пользователем современные сайты содержат все больше динамического контента, что означает, что мы должны предоставлять информацию динамически в зависимости от поведения каждого пользователя. К сожалению, существует такое явление как "межсайтовый скриптинг" (известный как "XSS"), с помощью которого осуществляются постоянные атаки на динамические сайты, в то время как сайты со статическим содержимым этим атакам не подвержены. +Для совершенствования взаимодействия с пользователем современные сайты содержат все больше динамического контента, что означает, что мы должны предоставлять информацию динамически, в зависимости от поведения каждого пользователя. К сожалению, существует такое явление как "межсайтовый скриптинг" (известный как "XSS"), с помощью которого осуществляются постоянные атаки на динамические сайты, в то время как сайты со статическим содержимым этим атакам не подвержены. Злоумышленники посылают на сайты, подверженные межсайтовому скриптингу, скрипты на JavaScript, VBScript, ActiveX или Flash. Если скрипт удачно вторгся на сайт, пользовательская информация может быть похищена, а сайт наполнен спамом. Злоумышленники могут также изменить настройки пользователя на те, которые захотят. diff --git a/ru/04.5.md b/ru/04.5.md index ab69c9fc..4bc1d03f 100644 --- a/ru/04.5.md +++ b/ru/04.5.md @@ -1,8 +1,8 @@ # 4.5 Загрузка файлов -Предположим, у Вас есть веб-сайт наподобие Instagram, и Вы хотите, чтобы пользователи закачивали туда свои фортографии. Как можно реализовать эту функцию? +Предположим, у Вас есть веб-сайт наподобие Instagram, и Вы хотите, чтобы пользователи закачивали туда свои фотографии. Как можно реализовать эту функцию? -Для этого нужно добавить в форму, через которую будут закачиваться фотографии, свойство `enctype`. Оно имеет три значения: +Для этого нужно добавить в форму, через которую будут закачиваться фотографии, со свойством `enctype`. Оно имеет три значения: ``` application/x-www-form-urlencoded Кодировать все символы перед закачкой (по умолчанию). diff --git a/ru/04.6.md b/ru/04.6.md index 78350cbd..b1184538 100644 --- a/ru/04.6.md +++ b/ru/04.6.md @@ -8,4 +8,4 @@ - [Содержание](preface.md) - Предыдущий раздел: [Загрузка файлов](04.5.md) -- Следужщий раздел: [Базы данных](05.0.md) +- Следующий раздел: [Базы данных](05.0.md) diff --git a/ru/05.0.md b/ru/05.0.md index d3040dda..ef86fa9f 100644 --- a/ru/05.0.md +++ b/ru/05.0.md @@ -1,8 +1,8 @@ -# 5 Базы данных +# 5. Базы данных Одним из ключевых аспектов веб разработки является использование баз данных. В базах данных можно хранить и обрабатывать почти все, например информацию о пользователях, продуктах, новостные списки и т.д. -Язык Go не имеет каких либо драйверов для баз данных, но у него есть драйвер интерфейса, определенный в пакете `database/sql`. На базе этого интерфейса разработчики могут легко создавать свои драйвера баз данных. В разделе 5.1 мы с вами рассмотрим структуру драйвера интерфеса в Go; в разделах 5.2 - 5.4 я покажу вам некоторые драйвера SQL баз данных; в разделе 5.5 я покажу ORM, которую я разработал базируясь на стандарте интерфейса `database/sql`, она совместима с большинством драйверов, включенных в интерфейс `database/sql` и предоставляет простой доступ к базам данных встиле языка Go. (***ORM (англ. Object-Relational Mapping, рус. объектно-реляционное отображение) — технология программирования, которая связывает базы данных с концепциями объектно-ориентированных языков программирования, создавая «виртуальную объектную базу данных».***) +Язык Go не имеет каких либо драйверов для баз данных, но у него есть драйвер интерфейса, определенный в пакете `database/sql`. На базе этого интерфейса разработчики могут легко создавать свои драйвера баз данных. В разделе 5.1 мы с вами рассмотрим структуру драйвера интерфеса в Go; в разделах 5.2 - 5.4 я покажу вам некоторые драйвера SQL баз данных; в разделе 5.5 я покажу ORM, которую я разработал базируясь на стандарте интерфейса `database/sql`, она совместима с большинством драйверов, включенных в интерфейс `database/sql` и предоставляет простой доступ к базам данных в стиле языка Go. (***ORM (англ. Object-Relational Mapping, рус. объектно-реляционное отображение) — технология программирования, которая связывает базы данных с концепциями объектно-ориентированных языков программирования, создавая «виртуальную объектную базу данных».***) NoSQL является горячей темой в последние годы. Большинство новых сайтов решили использовать базу данных NoSQL в качестве основной базы данных, а не только для использования кэша. Я расскажу подробнее о двух NoSQL базах данных - MongoDB и Redis в разделе 5.6. diff --git a/ru/05.1.md b/ru/05.1.md index b84c9f70..43764261 100644 --- a/ru/05.1.md +++ b/ru/05.1.md @@ -46,7 +46,7 @@ drivers[name] = driver Open(name string) (Conn, error) } -`Conn` - это одноразовое соединение. Это означает, что его можно использовать только один раз в одной горутине. Следующй код вызовет исключение: +`Conn` - это одноразовое соединение. Это означает, что его можно использовать только один раз в одной горутине. Следующий код вызовет исключение: ... go goroutineA (Conn) // запрос @@ -148,7 +148,7 @@ driver.Rows - это интерфейс для возвращения резул type Value interface{} -`Value` должно быть содержать значения, совместимые с драйвером, или быть nil, поэтому оно должно быть одним из следующих типов: +`Value` должно содержать значения, совместимые с драйвером, или быть nil, поэтому оно должно быть одним из следующих типов: int64 float64 diff --git a/ru/05.2.md b/ru/05.2.md index a2699e18..1fdf6a77 100644 --- a/ru/05.2.md +++ b/ru/05.2.md @@ -1,6 +1,6 @@ # 5.2 MySQL -Комплекс северного программного обеспечения LAMP последние годы очень популярен в интернете. Буква М в данном акрониме означает MySQL. MySQL является наиболее известной базой данных с открытым исходным кодом. Она проста в использовании, поэтому ее часто используют в бэкенде множества веб-сайтов. +Комплекс серверного программного обеспечения LAMP последние годы очень популярен в интернете. Буква М в данном акрониме означает MySQL. MySQL является наиболее известной базой данных с открытым исходным кодом. Она проста в использовании, поэтому ее часто используют в бэкенде множества веб-сайтов. ## Драйвера MySQL diff --git a/ru/05.3.md b/ru/05.3.md index 945380a4..6c764280 100644 --- a/ru/05.3.md +++ b/ru/05.3.md @@ -1,6 +1,6 @@ # 5.3 SQLite -SQLite это открытая встраиваемая реляционная база данных. Она автономна, не требует конфигурации и является полноценной СУБД. Ее основные характеристики это: высокая портативность, простота использования, эффективность и надежость. В большинстве случаев вам нужен только двоичный файл SQLite для создания, подключения и эксплуатации базы данных. Если вы ищите встраиваемое решение СУБД, вам стоит рассмотреть SQLite. По сути SQLite является версией Access с открыты исходным кодом. +SQLite - это открытая, встраиваемая, реляционная база данных. Она автономна, не требует конфигурации и является полноценной СУБД. Ее основные характеристики это: высокая портативность, простота использования, эффективность и надежность. В большинстве случаев вам нужен только двоичный файл SQLite для создания, подключения и эксплуатации базы данных. Если вы ищите встраиваемое решение СУБД, вам стоит рассмотреть SQLite. По сути SQLite является версией Access с открытым исходным кодом. ## Драйвера SQLite diff --git a/ru/05.4.md b/ru/05.4.md index 7ef1f137..3d839e22 100644 --- a/ru/05.4.md +++ b/ru/05.4.md @@ -1,6 +1,6 @@ # 5.4 PostgreSQL -PostgreSQL - свободная объектно-реляционная система управления базами данных доступная для множества платформ, включая Linux, FreeBSD, Solaris, Microsoft Windows и Mac OS X. Выпускается под собственной MIT-подобной лицензией. В отличие от MySQL, она разработана и позиционируется для использования в корпоративном сегменте, как Oracle. Так что PostgreSQL - это хороший выбор для использования в корпоративных проектах. +PostgreSQL - свободная, объектно-реляционная система управления базами данных, доступная для множества платформ, включая Linux, FreeBSD, Solaris, Microsoft Windows и Mac OS X. Выпускается под собственной MIT-подобной лицензией. В отличие от MySQL, она разработана и позиционируется для использования в корпоративном сегменте, как Oracle. Так что PostgreSQL - это хороший выбор для использования в корпоративных проектах. ## Драйвера PostgreSQL diff --git a/ru/06.0.md b/ru/06.0.md index c690d349..1d367cca 100644 --- a/ru/06.0.md +++ b/ru/06.0.md @@ -1,8 +1,8 @@ -# 6 Хранение данных и сессии +# 6. Хранение данных и сессии -Хорошие впечатления пользователей - важная тема в web-разработке, однако тот факт, что HTTP является протоколом без сохранения состояния, кажется противоречит этому тезису. Как мы можем контролировать процесс просмотра web-страниц пользователями? Классическим решением является использование куки(cookies) и сессий. Куки хранятся на стороне клиента, а сессии, с уникальным идентификатором для каждого пользователя, на стороне сервера.Обратите внимание, что идентификаторы сессий можно хранить не только в URL, и куки-файлах, но также в базе данных, что намного более безопасно, но может сказаться на производительности приложения. +Хорошие впечатления пользователей - важная тема в web-разработке, однако тот факт, что HTTP является протоколом без сохранения состояния, кажется, противоречит этому тезису. Как мы можем контролировать процесс просмотра web-страниц пользователями? Классическим решением является использование куки(cookies) и сессий. Куки хранятся на стороне клиента, а сессии, с уникальным идентификатором для каждого пользователя, на стороне сервера. Обратите внимание, что идентификаторы сессий можно хранить не только в URL и куки-файлах, но также и в базе данных, что намного более безопасно, но может сказаться на производительности приложения. -В разделе 6.1 мы будем говорит о различиях между сессиями и куки-файлами. В разделе 6.2 вы узнаете, как использовать сессии в Go с помощью реализации менеджера сессий. В разделе +В разделе 6.1 мы будем говорить о различиях между сессиями и куки-файлами. В разделе 6.2 вы узнаете, как использовать сессии в Go с помощью реализации менеджера сессий. В разделе 6.3 мы будем говорить о способах угона(hijacking) сессий и как его предотвратить, в том случае, если вы знаете, что идентификатор сессии может быть сохранен где угодно. Менеджер сеансов, который мы реализуем в разделе 6.3 будет хранить сессии в памяти, но если вам необходимо масштабировать приложение, чтобы обеспечить общий доступ к сессиям, то всегда лучше хранить их непосредственно в базе данных. Мы поговорим об этом подробнее в разделе 6.4