#19.1 golang Горутины и работа с ними - асинхронного выполнение, многопоточность, гонка данных

Ранее мы упоминали горутины — это легковесные потоки выполнения в Go, работающие поверх системных потоков (threads).

Они позволяют запускать функции параллельно (асинхронно). Давайте посмотрим как это делается в коде

Асинхронное выполнение кода

Ты можешь запустить функцию в горутине, добавив перед её вызовом ключевое слово go:

#18.2 golang go test Автоматическое тестирование - пример программы

Напишем простую программу для "уникализации" строк, которые подаются в стандартный ввод:

package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	in := bufio.NewScanner(os.Stdin)
	var prev string
	// потенциально бесконечный цикл:
	for in.Scan() {
		txt := in.Text()
		if txt == prev {
			continue
		}
		if txt < prev {
			panic("Строки не отсортированы!")
		}
		prev = txt
		fmt.Println(txt)
	}
}

(при запуске в vscode возможна проблема, но есть решение)

#17.3 golang Композиция интерфейсов

Интерфейсы, как и структуры поддерживают композицию.

Мы можем встраивать один интерфейс в другой, тем самым образуя более сложные интерфейсы и создавая композиции интерфейсов.

Давайте рассмотрим пример:

#17.2 Пустой интерфейс - какой угодно тип (тип any)

Начиная с версии Go 1.18, появился тип any, он является синонимом на interface{} (пустой интерфейс).

Пример использования в стандартных функциях

Пустой интерфейс может содержать значение любого типа, что делает его универсальным контейнером для данных. Рассмотрим пример:

linux Освобождаем место в разделе /boot в т.ч. для обновления версии ОС

Общая идея

Будем чистить раздел /boot от старых вещей, напр. чтобы справиться с ошибкой типа "The upgrade needs a total of ... free space on disk '/boot'"

Контроль свободного места:

 df -h /boot

Версия текущего ядра, файлы с подобным именем нельзя трогать:

#17 golang Интерфейсы - проверка типа type switch

Через интерфейсы в Go реализован полиморфизм.

В отличие от таких языков, как C++, Java и PHP, где типизация всегда явная, в Go при помощи интерфейсов реализована так называемая «утиная типизация».

Что это значит:

#16 golang Методы - функции для структур и других получателей

Метод — это функция, которая может быть привязана к определённому типу данных. Такой тип данных называется получателем ()

В основе этих типов могут лежать как структуры, так и int, string и любые другие доступные типы в Go.

Привязывание методов к структурам

Для начала рассмотрим методы, которые привязываются к структурам.

Определим именованный тип Person и пару методов к нему, а также проверим как они работают:

Композиция - что это в программировании, проектировании

Композиция - способ получения функционала, путем прямого "присоединения" новых функций/полей.

В отличии от Наследования (которому композицию часто протипоставляют как "более гибкий" подход), для получения функционала тут не требуется объявляет иерархию между сущностями.

Собеседование по Golang - материалы

  • С вас вопросы, с нас ответы. Часть 3 Отвечаем на популярные вопросы по конкурентному программированию на Go https://balun.courses/blog/qa_3

Hip-hop, хип-хоп - что послушать

Иностранный (инглишь и прочее)

Pages

Subscribe to fkn+antitotal RSS