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

Различия

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

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

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
golang [12/04/2016 23:27] 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"
Строка 79: Строка 81:
 Полная форма задания переменных выглядит примерно так: Полная форма задания переменных выглядит примерно так:
  
-<code golang>+<code go>
 var x float64 = 1.234 var x float64 = 1.234
 </code> </code>
Строка 91: Строка 93:
  
 Но так как поддерживается динамическая типизация, то можно, наоборот, присвоить значение и тип будет выведен: Но так как поддерживается динамическая типизация, то можно, наоборот, присвоить значение и тип будет выведен:
-<code golang>+<code go>
 var x = 1.234 var x = 1.234
 print (x) print (x)
  
-+0.000000e+000++1.234000e+000
 </code> </code>
 или даже проще (как присваивание в Pascal'е): или даже проще (как присваивание в Pascal'е):
-<code golang>+<code go>
 x := 1.234 x := 1.234
 print (x) print (x)
  
-+0.000000e+000++1.234000e+000
 </code> </code>
  
Строка 120: Строка 122:
  
 Рассмотрим на примере. Создадим простейшую структуру, описывающую ученика ФМШ: Рассмотрим на примере. Создадим простейшую структуру, описывающую ученика ФМШ:
-<code golang>+<code go>
 type pupil struct { type pupil struct {
   name string   name string
Строка 132: Строка 134:
  
 Определить новую переменную данного типа можно и объявлением: Определить новую переменную данного типа можно и объявлением:
-<code golang>+<code go>
 var dima pupil var dima pupil
 </code> </code>
 (поля будут инициализированы нулями и пустыми строками), можно сделать более java-образно, с созданием указателя: (поля будут инициализированы нулями и пустыми строками), можно сделать более java-образно, с созданием указателя:
-<code golang>+<code go>
 var dima = new(pupil) var dima = new(pupil)
 </code> </code>
 (об указателях,  в другой раз).  (об указателях,  в другой раз). 
-Но можно сделать инициализацию в стиле Go и динамически определить тип:  +Но можно сделать инициализацию в стиле Go:  
-<code golang>+<code go>
 dima := pupil{name: "Dima", group: 412} dima := pupil{name: "Dima", group: 412}
 </code> </code>
 +(пропущенные поля вновь будут инициализированы нулями)
  
 +Теперь к свойствам можно обращаться в ООП-стиле:
 +<code go>
 +fmt.Println(dima.name, dima.group)
 +</code>
  
 === Методы ===  === Методы === 
 +
 +Методы, если мы хотим их использовать как в ООП, задаются немного хитрее, нежели свойства-поля. Вот, попробуем вычислить "гармоническое телосложение" по формуле Брока
 +<code go>
 +func (p pupil) habitus() float32 {
 +    return ((p.height - 110) - p.weight)
 +}
 +</code>
 +После ключевого слова 'func' мы видим "получателя", т.е. задаем тип, с которым будем работать наш метод. Тогда для школьника dima мы можем сделать проверку телосложения:
 +
 +<code go>
 +dima := pupil{name: "Dima", group: 412, heigh: 170, weight: 68}
 +fmt.Println(dima.name, dima.habitus())
 +</code>
  
 === Интерфейсы ===  === Интерфейсы === 
Строка 156: Строка 176:
 === Вывод === === Вывод ===
  
-<code golang>+<code go>
 package main package main
 func main() { func main() {
Строка 165: Строка 185:
 Тем не менее, стандартным способом вывода считается такая конструкция: Тем не менее, стандартным способом вывода считается такая конструкция:
  
-<code golang>+<code go>
 package main package main
 import "fmt" import "fmt"
Строка 178: Строка 198:
 == Попроще == == Попроще ==
  
-<code golang>+<code go>
 package main package main
 import "fmt" import "fmt"
Строка 198: Строка 218:
 Используется буфер! Используется буфер!
  
-<code golang>+<hidden кликнуть чтобы скрыть> 
 +<code go>
 package main package main
 import ( import (
Строка 236: Строка 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
  
Строка 263: Строка 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>