Если вы не жили под скалой последние несколько лет, вы слышали о Go (иногда его называют Golang) , языке, созданном Google несколько лет назад.
… язык программирования с открытым исходным кодом, который позволяет легко создавать простое, надежное и эффективное программное обеспечение.
является языком статической типизации с синтаксисом, слабо унаследованным от языка C, с добавлением автоматического управления памятью, безопасности типов, некоторых возможностей динамической типизации, дополнительных встроенных типов, таких как массивы переменной длины и карты значений ключей, а также большого стандарта библиотека.
Доступный для большинства современных операционных систем, включая Mac OS X , Linux , BSD и Microsoft Windows , он был задуман и изначально создан в Google еще в 2007 году Робертом Гриземером , Робом Пайком и Кеном Томпсоном . У каждого из этих трех разработчиков довольно внушительные родословные.
Роберт Гриземер принимал участие в движке Google V8 JavaScript и виртуальной машине Java HotSpot; Роб Пайк и Кен Томпсон оба работали в Bell Labs, внедряя оригинальную операционную систему UNIX.
Трудно начать работу с большинством языков программирования, особенно с таким сильным наследием языка Си. Иди с другой стороны, как раз наоборот. И в сегодняшнем уроке я покажу вам, как начать разработку с Google Go, от установки до запуска приложения.
Перейти Установка
Независимо от того, используете ли вы Mac OS X, Linux и FreeBSD или Windows, Go легко установить и настроить. В этом руководстве я предполагаю, что у вас есть операционная система UNIX / Linux. Когда я впервые установил Go, находясь на Mac, я использовал последний файл пакета .
Но вы можете также легко установить из исходного кода, используя следующие команды:
tar - C / usr / local   - xzf go1 . 2.1 . linux - amd64 . tar . gz export PATH = $PATH : /usr/ local / go / bin   Если вы не знакомы, они go1.2.1.linux-amd64.tar.gz копию файлов go из go1.2.1.linux-amd64.tar.gz в /usr/local/go в вашей файловой системе и добавят в нее каталог bin Путь к профилю. 
Кроме того, если вы работаете в Windows, скачайте и запустите установщик MSI .
  После завершения установки вы найдете установленные файлы в c:\Go ;  и установщик должен был добавить c:\Go\bin в PATH окружения PATH .  Вы можете проверить, просто чтобы быть уверенным, хотя. 
Конфигурирование вашей среды
После этого у нас есть двоичные файлы, необходимые для начала. Но мы должны гарантировать, что наша среда также готова, что требует еще одного шага и некоторого фона.
Go development использует концепцию рабочей области , которая содержит исходные файлы ( src ), скомпилированные двоичные файлы ( bin ) и пакеты ( pkg ).
Структура каталогов исходного файла, как правило, моделирует репозитории с открытым исходным кодом, такие как Github. Таким образом, типичный исходный каталог может выглядеть следующим образом:
  src github . com settermjd sitepoint hello - world . go 
  Вы можете видеть, что под src я связался с моим репозиторием Github, называемым sitepoint , и в нем есть один файл hello-world.go . 
Я мог бы иметь несколько репозиториев и ссылаться на несколько хостов, включая Bitbucket и Codebase . Принимая этот подход, я считаю, что Go по своей сути сохраняет код очень хорошо структурированным и организованным.
  Из-за этой структуры компилятору Go требуется установить системную переменную GOPATH , указывающую на корень этого каталога.  Итак, давайте создадим наш каталог GOPATH и установим переменную окружения. 
В сегодняшнем уроке я буду создавать его в своем домашнем каталоге. Но в зависимости от того, где вы обычно храните свои файлы кода, не стесняйтесь использовать это вместо этого.
Выполнение следующей команды создаст необходимую структуру каталогов с помощью ключа -p за один шаг и установит переменную среды GOPATH.
 mkdir - p / Users / settermjd / go / src / github . com / settermjd / sitepoint export GOPATH =/ Users / settermjd / go 
Если вы используете Windows, не забудьте добавить переменную среды GOPATH. После этого мы готовы создать наше первое приложение Go.
Простое приложение
Для простоты я рассмотрел лишь небольшой набор языковых функций. Но в будущих публикациях мы будем опираться на то, что мы рассмотрели здесь.
Вместо того чтобы рассматривать набор языковых функций, мы будем работать с аннотированным приложением, которое показывает, как распечатать простое утверждение, основанное на чтении содержимого строки JSON, а также некоторую условную логику.
Аннотированная версия кода ниже доступна на Github . Не стесняйтесь клонировать его и прорабатывать, проходя учебник. Но в противном случае, давайте работать через аннотированную версию ниже.
 package  main 
Каждое приложение Go состоит из пакетов, и, используя ссылку на Java, программы используют основной пакет по умолчанию.
 import   (  
     "encoding/json" 
     "fmt" 
     "strings" 
 ) 
Как я уже упоминал в начале урока, Go имеет довольно большую стандартную библиотеку . Чтобы получить доступ к этой функции, вам необходимо импортировать нужные вам пакеты.
  Здесь я импортировал три: encoding/json , fmt и strings .  Если это кажется иностранным, это действительно не должно.  В PHP и C вы будете использовать include (или требуется), в Python вы будете использовать импорт, а в Ruby вы будете использовать require. 
Список доступных пакетов довольно обширный. Поэтому, если вам интересно узнать об отдыхе или вам нужна более конкретная информация о трех вышеперечисленных, возьмите себе кофе и ознакомьтесь с документацией . Полный охват выходит далеко за пределы этого урока.
 type User   struct   { 
     FirstName   string   `json:"first_name"` 
     LastName   string   `json:"last_name"` 
     Age   int 
     Languages   [] string   `json:"languages"` 
 } 
Go не реализует классы, но Structs имеет большое значение для предоставления этой функциональности, что мы увидим в следующих уроках. На данный момент структуры являются удобным способом хранения коллекций именованной информации.
  В приведенном выше примере я объявил структуру, которая называется User .  Он имеет четыре поля: Имя , Фамилия , Возраст и Языки .  Здесь мы можем увидеть использование некоторых основных типов данных Go .  FirstName и LastName — это строки, Age — это int, а Languages - это массив строк. 
  В конце каждого из них вы увидите json:"first_name" .  То, что это делает, возможно, немного выходит за рамки вступительного примера, — это помогает сопоставить поле структуры с полем в строке JSON, которое мы вскоре увидим. 
 func printUserData ( jsonData string ,  age int )   string   { 
  Здесь мы определили функцию с именем printUserData , которая принимает два параметра, строку с именем jsonData и int с именем age , и возвращает строку. 
 var  output string 
  Здесь я объявил переменную с именем output , которая имеет строку типа. 
 res :=   & User {} 
  Здесь я объявил переменную, res которая будет являться пользовательской структурой User, которую мы определили ранее.  Вот пример определения переменной для заданного типа и ее инициализации за один раз. 
 json . Unmarshal ([] byte ( jsonData ),   & res ) 
  Здесь мы Unmarshal функцию Unmarshal в пакете json , передав первый аргумент jsonData и переменную res Struct. 
 if  res . Age   >  age { output =  fmt . Sprintf ( "User %s %s, who's %d can code in the following languages: %s\n" ,  res . FirstName ,  res . LastName ,  res . Age ,  strings . Join ( res . Languages ,   ", " ))     
 }   else   { output =  fmt . Sprintf ( "User %s %s must be over %d before we can print their details" ,  res . FirstName ,  res . LastName ,  age ) 
 } 
  Этот раздел, скорее всего, покажется вам знакомым, будь то фон PHP , Java , C / C ++ , Python , Ruby или JavaScript ;  с одним небольшим изменением.  В Go, if операторы не требуют скобок , но требуют фигурных скобок . 
Здесь я проверяю, больше ли возраст человека в преобразованном объекте JSON, чем возраст, который был передан в качестве второго аргумента функции.
Если это так, мы печатаем их полное имя, возраст и языки, на которых они могут кодировать. Если нет, мы печатаем другое сообщение о том, что мы не можем показать подробности о них.
  Здесь мы видим примеры двух дополнительных стандартных библиотечных пакетов: fmt.Sprintf и fmt.Sprintf .  Я выбрал эти примеры осознанно, поскольку они, вероятно, используются в большинстве распространенных языков веб-сценариев, с которыми вы, вероятно, знакомы, особенно в PHP. 
  fmt.Sprintf заменит заполнители в первой строке аргумента предоставленными.  Так как языки — это массив, я использовал функцию strings.Join, аналогичную функции implode в PHP, для преобразования массива в строку, разделяя элементы символами «», «. 
Затем результат присваивается выходной строковой переменной.
      return  output } 
В конце функции мы возвращаем вывод.
 func main ()   { 
     var  age int   =   24 str :=   `{"first_name": "Matthew", "last_name": "Setter", "age": 21, "languages": ["php", "javascript", "go"]}` fmt . Println ( printUserData ( str ,  age )) 
 } 
  Приложение Go запускается из основной функции основного пакета.  Итак, я реализовал main, инициализируя целочисленную переменную значением 24, затем инициализировал строковую переменную str простой строкой JSON. 
Вы можете видеть, что он содержит четыре компонента:
- Имя
- фамилия
- возраст
- языки
  Наконец, я вызвал метод fmt.Println , передав вызов функции printUserData , где я передал переменные str и age. 
Компиляция кода
  В отличие от PHP, Ruby, Python и т. Д. Go — это скомпилированный язык.  Поэтому из моего каталога проекта, в моем случае /Users/settermjd/go/src/github.com/settermjd/sitepoint , выполните следующую команду: 
 go install 
  Это скомпилирует двоичный файл go в каталоге bin/ именем sitepoint после имени пакета.  Чтобы запустить его, просто вызовите его, как любой другой системный бинарный или исполняемый файл, например 
 $GOPATH / bin / sitepoint 
Результат будет:
 User   Matthew   Setter  must be over 24  before we can print their details 
В заключение
Итак, начнем с примера, демонстрирующего основы того, как развиваться с помощью Go. Я надеюсь, что этот пример дал вам хорошее представление об основах Go, а также показал, насколько легко начать работу.
Я относительно новичок в самоучке и активно учусь. Но если вы заинтересованы в изучении Go вместе со мной, присоединяйтесь ко мне в следующих уроках, в ближайшие недели и месяцы, и давайте вместе изучим этот захватывающий, веселый и очень интересный язык.
Если вам нужна дополнительная информация, посмотрите следующие превосходные примеры: