Тип интерфейс в Go можно понимать как схему или контракт. Эта схема определяет ожидаемый набор действий, которые любая конкретная реализация должна выполнить, чтобы считаться типом этого интерфейса. Для создания интерфейса нужно определить набор методов: любой тип данных, содержащий эти методы с верными сигнатурами, выполняет контракт и считается типом этого интерфейса. Рассмотрим пример: ❶ type Friend interface { ❷ SayHello() }
Тип struct (структура) используется для создания новых типов данных путем определения связанных полей и методов этого типа. Например, здесь мы объявляем тип Person: ❶ type Person struct { ❷ Name string ❸ Age int } ❹ func (p *Person) SayHello() { fmt.Println("Hello,", p.Name ❺) } func main() { var guy = new ❻ (Person) ❼ guy.Name = "Dave" ❽ guy.SayHello() }
Поскольку многопоточность и параллельность в этом языке могут принимать весьма сложные формы, не пожалейте времени на самостоятельное изучение соответствующего материала
В Go есть тип данных под названием каналы, который предоставляет механизм, позволяющий горутинам синхронизировать выполнение и взаимодействовать друг с другом.
Для параллельного выполнения кода задействуются горутины, представляющие собой функции или методы, способные выполняться одновременно. Их нередко описывают как легковесные потоки, потому что, если сравнивать с реальными потоками, затраты на создание горутин минимальны.
расположенную на MacOS, для выполнения на архитектуре Linux x64. Это можно реализовать через командную строку, сопроводив выполнение команды build соответствующими атрибутами GOOS и GOARCH: $ GOOS="linux" GOARCH="amd64" go build hello.go