Введение в Go для разработчиков PHP
Coding
Установка
Скачать Go
Go предоставляет бинарные дистрибутивы для Mac OS X, Windows и Linux. Если вы используете другую ОС, вы можете загрузить исходный код Go и установить его из исходного кода.
Загрузите последнюю версию Go для вашей платформы здесь: https://golang.org/dl/.
Установите Go
Следуйте инструкциям для вашей платформы для установки инструментов Go: https://golang.org/doc/install#install.
Рекомендуется использовать параметры установки по умолчанию.
В Mac OS X и Linux по умолчанию Go устанавливается в каталог /usr/local/go/, а переменная среды GOROOT имеет значение /usr/local/go/bin.
В Windows по умолчанию Go устанавливается в каталог C:\Go\, переменная среды GOROOT имеет значение C: \ Go \, а каталог bin добавляется в ваш путь (C:\Go\bin).
Установите свой GOPATH
В рабочем каталоге Go (GOPATH) хранится код Go. Это может быть любой путь, который вы выберете, но он должен быть отдельным от вашего установочного каталога Go (GOROOT).
Следующие инструкции описывают один способ настройки GOPATH. Для получения более подробной информации обратитесь к официальной документации Go: https://golang.org/doc/code.html.
Mac OS X and Linux
Установите переменную среды GOPATH для вашей рабочей области:
export GOPATH=$HOME/go
Также установите переменную GOPATH / bin, которая используется для запуска скомпилированных программ Go.
export PATH=$PATH:$GOPATH/bin
Windows
Создайте рабочий каталог, который не совпадает с вашей установкой Go, например, C:\Users\%USERNAME%\go, где находится каталог по умолчанию.
Создайте переменную среды GOPATH:
set GOPATH=c:\Users\%USERNAME%\go
Добавьте переменную среды GOPATH \ bin в вашу переменную PATH:
set PATH=%PATH%;%GOPATH%\bin
Создайте необходимую структуру каталогов Go для вашего исходного кода:
C:\GOPATH\binC:\GOPATH\pkgC:\GOPATH\src
Скачали?Идем дальше
В Go весь исходный код для каждого проекта Go хранится в одном каталоге, называемом GOPATH. По умолчанию GOPATH установлен в вашей default папке
В GOPATH, есть bin и src.Каталог bin содержит все загруженные вами двоичные файлы как зависимости. Вы захотите добавить папку bin в переменную окружения PATH. Вы можете сделать это в файле .bashrc / .zshrc вашего терминала с помощью команды экспорта export PATH=$PATH:$(go env GOPATH)/bin.
Чтобы начать изучать Go, вы можете скачать программу Tour of Go, выполнив в терминале следующую команду: go get golang.org/x/tour/gotour. go get загружает исходный код и двоичный файл для сторонней зависимости, используя указанный путь. Теперь вы можете запустить gotour в своем терминале, и он запустит веб-сервер и укажет на него ваш браузер.
Чтобы создать проект, создайте каталог под src в вашей GOPATH: mkdir -p $GOPATH/src/helloworld. Откройте эту папку cd $GOPATH/src/helloworld и создайте файл с именем main, откройте main.go. В этот файл поместите следующее:
package main
import "fmt"
func main() {
fmt.Println("Hello world!")
}
Отправной точкой для всех программ Go является основная функция в основном пакете. Далее вы можете запустить go run main.go для запуска программы.
Вы также можете запустить go install, и программа будет скомпилирована и помещена в каталог bin, чтобы вы могли выполнить helloworld в своем терминале, и он запустит ваш код.
Основные отличия от PHP
Теперь, когда у вас есть настроенный проект, вы можете приступить к изучению различных функций Go.
Первое, что вы заметите, это то, что в Go не нужны точки с запятой. Конец оператора обнаруживается новой строкой. Вот еще несколько различий, которые мне потребовалось некоторое время, чтобы понять:
Переменные
Go является статически и строго типизированным языком, поэтому каждой переменной присвоен тип. Переменные в функциях присваиваются с помощью оператора:=, и этот оператор автоматически устанавливает тип переменной для вас: name := "Andrew" // имя теперь является строкой .
Чтобы создать переменную без указания каких-либо данных в ней или создать ее вне функции, вы должны использовать ключевое слово var name string.
Оператор if
If работают так же, как в PHP, однако им не нужно использовать круглые скобки вокруг логической проверки.
Разница сначала смутила меня при чтении кода Go. Тем не менее, я думаю, что это делает код немного легче для чтения.
package main
import "fmt"
func main() {
value := false
if value {
fmt.Println("Value is true")
} else {
fmt.Println("Value is false")
}
}
Packages vs Namespaces
Go использует термин package для именования своего содержимого. Если в вашем коде Go есть папка с именем controllers, каждый файл в этой папке будет начинаться с контроллеров пакетов.
Чтобы импортировать контроллеры из другого пакета, вы должны написать import “helloworld/controllers”. Все в вашем пакете, имя которого начинается с заглавной буквы, можно использовать в другом пакете.
Если у вас есть функция с именемfunc HelloWorld() в controllers, вы сможете вызывать controllers.HelloWorld() для запуска функции после импорта controllers.
Все, что не начинается с заглавной буквы, может использоваться только из одного пакета. Нет необходимости для частного или общественного!
Strings
В Go все строки должны быть заключены в двойные кавычки. Одно значение в кавычках в Go предназначено для rune (единственная кодовая точка Unicode). По привычке я печатаю свои строки одинарными кавычками, так как это обычная практика в PHP. Требуется немного времени, чтобы привыкнуть всегда использовать двойные кавычки.
var name = "Andrew" var copy = '©'
Structs vs Classes
Go не имеет системы классов, такой как PHP. Вместо этого он использует структуры для моделирования пользовательских структур данных. Вы можете написать такую структуру:
package main
type Cup struct {
name string
color string
volume int
}
Вы можете добавить методы в структуру, создав функцию, которая ссылается на структуру в скобках перед именем функции.
func (c Cup) nameAndColor() string {
return c.name + ": " + c.color
}
Затем вы можете создать экземпляр структуры, написав имя структуры и передав его начальные значения в фигурных скобках. Выполнение метода использует точечную запись.
func main() {
c := Cup{name: "Solo", color: "Red", volume: 12}
c.nameAndColor() // returns "Solo: Red"
}
Чтобы создать метод, который изменяет экземпляр структуры, метод должен ссылаться на указатель на структуру:
func (c *Cup) crush() {
c.volume = 0
}
Ошибки
В Go ошибки не рассматриваются как исключения. Нет механизма броска или захвата.
Вместо этого ошибки возвращаются из функций, если они произошли.
Go поддерживает возврат нескольких значений из функции. Если вы вызываете функцию, которая может вернуть ошибку, вы должны проверить, не является ли ошибка нулевой, чтобы обработать условие ошибки.
package main
import "fmt"
func GetName(name string) (string, error) {
if name == "Bob" {
return "", fmt.Errorf("Name cannot be Bob")
}
return name, nil
}
func main() {
name, err := GetName("Bob")
if err != nil {
fmt.Println("Uh-oh an error has occurred")
}
}
В итоге
Конечно, есть много чего узнать о Go, но, надеюсь, это поможет вам начать. Есть много отличных ресурсов для изучения го. Самыми полезными для меня были Go Docs и Go By Example. Если у вас есть какие-либо мысли или вопросы, пожалуйста, оставьте комментарий. Спасибо за прочтение!

Заметили ошибку или есть вопросы?Рассказывай нам о них,связаться с нами ты сможешь с помощью нашего чата или же с помощью бота обратной связь
Не забывайте ставить 👍 если вам понравилась и подписаться на канал,а так же посетить наш чат.