среда, 27 октября 2021 г.

Go для Java разработчиков: Hello world пример

В постах 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).


Читайте также:


Комментариев нет:

Отправить комментарий