В постах Go для Java разработчиков будут представлены основные отличия Go для быстрого освоения Java разработчиками.
Начнем с небольшого, но полного примера. Он показывает, как реализовать и использовать простой абстрактный тип данных в Go. В данном случае это стек.
// Пакет collection реализует стек строк.
package collection
// Нулевое значение для Stack - это пустой стек,
// готовый к использованию.
type Stack struct {
data []string
}
// Push добавляет x на вершину стека.
func (s *Stack) Push(x string) {
s.data = append(s.data, x)
}
// Pop удаляет и возвращает верхний элемент стека.
// Вызов Pop для пустого стека - ошибка времени выполнения.
func (s *Stack) Pop() string {
n := len(s.data) - 1
res := s.data[n]
s.data[n] = "" // чтобы избежать утечки памяти
s.data = s.data[:n]
return res
}
// Size возвращает количество элементов в стеке.
func (s *Stack) Size() int {
return len(s.data)
}
- Комментарии, которые появляются непосредственно перед объявлениями верхнего уровня, являются комментариями документации. Они написаны обычным текстом.
- Для объявлений вы пишете имя, а затем тип.
- Структура (struct) соответствует классу в Java, но членами структуры не могут быть методы, только переменные.
- Фрагмент кода (s *Stack) объявляет приемник метода s, соответствующий Java this.
- Оператор
:=
объявляет и инициализирует переменную. Его тип выводится из выражения инициализации.
Вот программа Hello world, которая показывает, как использовать абстрактный тип данных collection.Stack.
package collection_test
import (
"fmt"
"go-for-java-programmers/collection"
)
func ExampleStack() {
var s collection.Stack
s.Push("world!")
s.Push("Hello, ")
for s.Size() > 0 {
fmt.Print(s.Pop())
}
fmt.Println()
// Вывод: Hello, world!
}
- Тестовый пакет collection_test находится в том же каталоге, что и пакет collection.
- Первое объявление импорта содержит путь "fmt" к стандартному пакету; второй указывает, что мы будем использовать пакет из каталога "go-for-java-programmers/collection".
- Доступ к пакетам в исходном файле осуществляется по коротким именам fmt и collection соответственно.
Примечание: идиоматический способ реализовать стек в Go - это использовать срез напрямую. Смотрите этот пост, о том как реализовать стек (LIFO).
Читайте также:
- Пустой интерфейс в Golang
- Разработка RESTful API с помощью Go и Gin
- Как писать Go код (с использованием модулей)
Комментариев нет:
Отправить комментарий