kubent
) — инструмент для проверки использования устаревших API в кластере KubernetesОсобенно это актуально сейчас, на фоне распространения Kubernetes 1.16, многие API становятся устаревшими.
kubent
без проблем работает: — с
YAML
или JSON
— с
kubectl
, используется аннотация kubectl.kubernetes.io/last-applied-configuration
— с Helm v3
kubent
:sh -c "$(curl -sSL https://git.io/install-kubent)"
ну или
brew install kubent
-h
, как обычно:./kubent -h
Usage of ./kubent:
-A, --additional-annotation strings additional annotations that should be checked to determine the last applied config
-a, --additional-kind strings additional kinds of resources to report in Kind.version.group.com format
-c, --cluster enable Cluster collector (default true)
-x, --context string kubeconfig context
-e, --exit-error exit with non-zero code when issues are found
-f, --filename strings manifests to check, use - for stdin
--helm3 enable Helm v3 collector (default true)
-k, --kubeconfig string path to the kubeconfig file
-l, --log-level string set log level (trace, debug, info, warn, error, fatal, panic, disabled) (default "info")
-o, --output string output format - [text|json|csv] (default "text")
-O, --output-file string output file, use - for stdout (default "-")
-t, --target-version string target K8s version in SemVer format (autodetected by default)
-v, --version prints the version of kubent and exits
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Ловите — самые востребованные команды Docker
Освежите эту важную информацию, чтобы она переместилась в долговременную память)
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Итак, вот совет, который вначале может показаться контринтуитивным — используйте функцию
Must
для преднамеренной остановки вашей программы.Странно, да? И правда, обычно мы стараемся избегать ситуаций, когда наша программа может запаниковать, но есть исключения, когда использование
Must
сокращает громоздкость. Если вы работали с Go, по-любому вы уже видели эти функции в стандартной библиотеке.
Чуть подробнее: функция
Must
принимает как аргумент другую функцию, и если та вернёт ошибку, то Must
вызывает панику. Must
в основном используются для:Must
также очень полезны в сценариях тестирования, позволяя немедленно прервать тест с помощью t.Fatal
: Функции Must
являются инструментами для инициализации и тестирования, где мы не ожидаем получить ошибку.Итак, функция
Must
упрощает обработку ошибок в определенных контекстах, но следует использовать её осторожно.@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Это простое приложение для обмена сообщениями, созданное с помощью Go и Vue.js.
Пользователи могут создавать чаты-комнаты для общениеи.
Приложение использует WebSockets для общения в режиме реального времени.
▪Github
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
time.Time
в Go time.Unix()
:package main
import (
"fmt"
"time"
)
func main() {
unixTime := time.Unix(1589570165, 0) // 0 - это число наносекунд
fmt.Println(unixTime)
}
// 2020-05-15 22:16:05 +0300 MSK
time
предусмотрены специальные функции time.UnixMilli
и time.UnixMicro
:package main
import (
"fmt"
"time"
)
func main() {
unixTimeMilli := time.UnixMilli(1589570165123)
unixTimeMicro := time.UnixMicro(1589570165123456)
fmt.Println("millis: ", unixTimeMilli)
fmt.Println("micros: ", unixTimeMicro)
}
// millis: 2020-05-15 19:16:05.123 +0000 UTC
// micros: 2020-05-15 19:16:05.123456 +0000 UTC
Пользуйтесь
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Здесь описывается абсолютно всё, что поможет подготовиться к собеседованию, и даже больше
Вопросы с собеседований связанные с Golang
├── Общие вопросы
├── Хеш-мапы
├── Интерфейсы
├── Пакеты
├── Типы данных
├── Defer
├── Примитивы синхронизации
├── Планировщик
├── Строки
├── Массивы и слайсы
├── Дженерики
├── Горутины
├── Конструкции
├── Гонка данных
├── Структуры
├── Контекст
├── Ошибки / Panic
└── Указатели
Вопросы с собеседований связанные с Linux
├── Файловая система
└── Сигналы, процессы
Вопросы по инфраструктуре
└── Базы данных (реляционные)
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Базовый пакет для работы с тестами — это testing. Два основных типа здесь —
T
для обычных юнит-тестов и B
для нагрузочных тестов. Тесты в Go пишутся в том же пакете, что и основная программа, с добавлением суффикса _test
. Поэтому любые приватные структуры данных, доступные внутри пакета, доступны и внутри тестов (так же верно, что тесты имеют общую глобальную область видимости между собой. При компиляции основной программы тестовые файлы игнорируются.Помимо базового пакета
testing
, существует большое количество сторонних библиотек, помогающих упростить написание тестов либо позволяющих писать в том или ином стиле (даже в стиле BDD. Вот, например, хорошая вводная статья о том, как писать на Go в стиле TDD.На GitHub есть табличка сравнения тестовых библиотек, среди которых есть такие монстры, как goconvey, предоставляющий ещё и веб-интерфейс, и взаимодействие с системой, например уведомления о прохождении тестов. Чтобы не усложнять, для простых проектов можно использовать небольшую библиотеку testify, добавляющую лишь немного примитивов для проверки условий и создания mock-объектов.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM