Статьи

Начало работы с Go

Если вы не жили под скалой последние несколько лет, вы слышали о Go (иногда его называют Golang) , языке, созданном Google несколько лет назад.

Go планируется как:

… язык программирования с открытым исходным кодом, который позволяет легко создавать простое, надежное и эффективное программное обеспечение.

Цитируя другой источник , Go

является языком статической типизации с синтаксисом, слабо унаследованным от языка 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 вместе со мной, присоединяйтесь ко мне в следующих уроках, в ближайшие недели и месяцы, и давайте вместе изучим этот захватывающий, веселый и очень интересный язык.

Если вам нужна дополнительная информация, посмотрите следующие превосходные примеры: