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