мета-данные страницы
  •  
Загрузка не удалась. Возможно, проблемы с правами доступа?

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
golang [12/04/2016 23:01] vlasovgolang [07/09/2018 21:51] (текущий) – [Установка бинарного дистрибутива] ybezrukov
Строка 24: Строка 24:
   - скачиваем по ссылке [[https://storage.googleapis.com/golang/go1.4.3.linux-386.tar.gz|бинарник версии 1.4.3]];   - скачиваем по ссылке [[https://storage.googleapis.com/golang/go1.4.3.linux-386.tar.gz|бинарник версии 1.4.3]];
   - распаковываем в домашней директории под именем $HOME/go;   - распаковываем в домашней директории под именем $HOME/go;
-  - устанавливаем системные переменные и изменения в переменной $PATH путем редактирования файла .profile<code golang>EXPORT GOROOT="$HOME/go" +  - устанавливаем системные переменные и изменения в переменной $PATH путем редактирования файла .profile 
-EXPORT GOPATH="$HOME/mygoprojects" +<code bash> 
-EXPORT GOBIN="$HOME/mygoprojects/bin"</code>и в переменной $PATH:<code golang>PATH=$HOME/go/bin:$PATH"</code> +export GOROOT="$HOME/go" 
 +export GOPATH="$HOME/mygoprojects" 
 +export GOBIN="$HOME/mygoprojects/bin"</code>и в переменной <nowiki>$PATH:</nowiki><code bash>PATH=$HOME/go/bin:$PATH" 
 +</code>
  
 ===== Основные возможности ===== ===== Основные возможности =====
Строка 35: Строка 37:
 ==== Минимальный набор элементов ==== ==== Минимальный набор элементов ====
  
-<code golang>+<code go>
 package main package main
 import "fmt" import "fmt"
Строка 70: Строка 72:
  
  byte, rune  byte, rune
 +
 +==== Определение переменных  и констант ====
 +
 +=== Константы ===
 +
 +=== Переменные ===
 +
 +Полная форма задания переменных выглядит примерно так:
 +
 +<code go>
 +var x float64 = 1.234
 +</code>
 +Значения можно присвоить и позже, более того, при определении переменной будет проведена инициализация в нулевое (для данного типа данных) значение
 +<code golang>
 +var x float64
 +print (x)
 +
 ++0.000000e+000
 +</code>
 +
 +Но так как поддерживается динамическая типизация, то можно, наоборот, присвоить значение и тип будет выведен:
 +<code go>
 +var x = 1.234
 +print (x)
 +
 ++1.234000e+000
 +</code>
 +или даже проще (как присваивание в Pascal'е):
 +<code go>
 +x := 1.234
 +print (x)
 +
 ++1.234000e+000
 +</code>
  
 ==== Базовые сложные типы данных ==== ==== Базовые сложные типы данных ====
Строка 83: Строка 119:
 === Структуры ===  === Структуры === 
  
-Структуры --- с одной стороны напоминают таковые в Си, с другой, вместе с методами, это возможность некоторой разновидности (или подобия ООП) в языке Go.+Структуры --- с одной стороны напоминают таковые в Си, с другой, вместе с методами, --- это возможность некоторой разновидности (или подобия ООП) в языке Go.
  
 Рассмотрим на примере. Создадим простейшую структуру, описывающую ученика ФМШ: Рассмотрим на примере. Создадим простейшую структуру, описывающую ученика ФМШ:
-<code golang>+<code go>
 type pupil struct { type pupil struct {
   name string   name string
Строка 97: Строка 133:
 </code> </code>
  
- +Определить новую переменную данного типа можно и объявлением: 
-=== Методы ===  +<code go> 
- +var dima pupil 
-=== Интерфейсы ===  +</code> 
- +(поля будут инициализированы нулями и пустыми строками), можно сделать более java-образно, с созданием указателя: 
-==== Типы данных, определяемые пользователем ==== +<code go
- +var dima new(pupil)
-==== Определение переменных  и констант ==== +
- +
-=== Константы === +
- +
-=== Переменные === +
- +
-Полная форма задания переменных выглядит примерно так: +
- +
-<code golang+
-var x float64 1.234+
 </code> </code>
-Значения можно присвоить и позже, более того, при определении переменной будет проведена инициализация в нулевое (для данного типа данных) значение +(об указателях,  в другой раз).  
-<code golang> +Но можно сделать инициализацию в стиле Go:  
-var x float64 +<code go> 
-print (x)+dima := pupil{name: "Dima"group: 412} 
 +</code> 
 +(пропущенные поля вновь будут инициализированы нулями)
  
-+0.000000e+000+Теперь к свойствам можно обращаться в ООП-стиле: 
 +<code go> 
 +fmt.Println(dima.name, dima.group)
 </code> </code>
  
-Но так как поддерживается динамическая типизация, то можно, наоборот, присвоить значение и тип будет выведен: +=== Методы === 
-<code golang> +
-var x 1.234 +
-print (x)+
  
-+0.000000e+000+Методы, если мы хотим их использовать как в ООП, задаются немного хитрее, нежели свойства-поляВот, попробуем вычислить "гармоническое телосложение" по формуле Брока 
 +<code go> 
 +func (p pupil) habitus() float32 { 
 +    return ((p.height - 110) - p.weight) 
 +}
 </code> </code>
-или даже проще ак присваивание в Pascal'е): +После ключевого слова 'func' мы видим "получателя", т.е. задаем тип, с которым будем работать наш метод. Тогда для школьника dima мы можем сделать проверку телосложения:
-<code golang> +
-x := 1.234 +
-print (x)+
  
-+0.000000e+000+<code go> 
 +dima := pupil{name: "Dima", group: 412, heigh: 170, weight: 68} 
 +fmt.Println(dima.name, dima.habitus())
 </code> </code>
 +
 +=== Интерфейсы === 
 +
 +==== Типы данных, определяемые пользователем ====
  
 ==== Вывод и ввод (простой вариант) ==== ==== Вывод и ввод (простой вариант) ====
Строка 142: Строка 176:
 === Вывод === === Вывод ===
  
-<code golang>+<code go>
 package main package main
 func main() { func main() {
Строка 151: Строка 185:
 Тем не менее, стандартным способом вывода считается такая конструкция: Тем не менее, стандартным способом вывода считается такая конструкция:
  
-<code golang>+<code go>
 package main package main
 import "fmt" import "fmt"
Строка 164: Строка 198:
 == Попроще == == Попроще ==
  
-<code golang>+<code go>
 package main package main
 import "fmt" import "fmt"
Строка 184: Строка 218:
 Используется буфер! Используется буфер!
  
-<code golang>+<hidden кликнуть чтобы скрыть> 
 +<code go>
 package main package main
 import ( import (
Строка 222: Строка 257:
 } }
 </code> </code>
 +</hidden>
  
 Примеры взяты тут: [[http://rosettacode.org/wiki/User_input/Text#Go|Rosetta Code]] Примеры взяты тут: [[http://rosettacode.org/wiki/User_input/Text#Go|Rosetta Code]]
 +
 +<hidden>Скрытый раздел</hidden>
  
 ===== Создание собственного web-сервера ===== ===== Создание собственного web-сервера =====
  
-На основе статей [[https://golang.org/doc/articles/wiki/|Writing Web Applications]] и частично [[https://astaxie.gitbooks.io/build-web-application-with-golang/content/en//|Build Web Application with Golang]], [[https://jan.newmarch.name/go/|Network programming with Go]]+На основе статей [[https://golang.org/doc/articles/wiki/|Writing Web Applications]] и частично [[https://astaxie.gitbooks.io/build-web-application-with-golang/content/en//|Build Web Application with Golang]], [[https://jan.newmarch.name/go/|Network programming with Go]]. 
 + 
 +Замечательная книга товарища astaxie в настоящий момент переводится на русский язык, и нужные нам главы уже доступны на русском: [[https://github.com/astaxie/build-web-application-with-golang/blob/master/ru/04.1.md|4.1 Работа с формами]]
  
 Пока, вот минимальный код: Пока, вот минимальный код:
  
-<code golang>+<code go>
 package main package main
  
Строка 249: Строка 289:
 </code> </code>
  
-просто сохраняем (напр., sevak.go) запускаем ''go run servak.go'' и в браузере пробуем увидеть ответ по адресу <nowiki>http://127.0.0.1:8080/anything</nowiki>+просто сохраняем (напр., servak.go) запускаем ''go run servak.go'' и в браузере пробуем увидеть ответ по адресу <nowiki>http://127.0.0.1:8080/anything</nowiki>