Evil Technologies
前往频道在 Telegram
421
订阅者
无数据24 小时
无数据7 天
无数据30 天
帖子存档
Shadow Broker, чел если ты еще тут. Черкани пожалуйста мне сюда: https://t.me/idklolsome.
ps. знакомый автора канала ищет пропавшего товарища. это сообщение будет позже удалено
собрал посты сюда про дефер в одну статейку на медиум. Дальше мб будут незначительные доработки, но в целом, как то так, почти финальный вариант
https://medium.com/@4nd3rs0n/golang-defer-c412798fda00
https://itnext.io/top-10-ways-to-protect-eks-workloads-from-ransomware-ae96d1c1e839
Будет полезно блютимам всяким и девсекопсам
Repost from sdnv's funk-hole
Сегодня настраивал мониторинг
smartctl на linux-серверах
В качестве системы мониторинга используется Zabbix, настройка этого дела вообще простая
1. Установить пакет smartmontools, желательно >=7.2 версии
2. Добавить zabbix ALL=(ALL) NOPASSWD:/usr/sbin/smartctl в /etc/sudoers (я делал через Ansible, плейбуку оставлю в комментах)
3. Добавить официальный шаблон smart_agent2 в веб Zabbix и прикрутить шаблон к серверам
Но! Шаблон не умеет мониторить результаты Self-Test NVMe диска, поэтому пришлось орудовать напильником
Делов немного, но все равно неприятно, дописал шаблон, протестировал, все работает. Теперь собирается айтем NVMe Self-Test и есть триггер для него
Хз как стать контрибом в Zabbix Community, поэтому прост залил репу в свой гитхаб
#шпаргалки #софти да, то что defer берёт значения не по завершению функции, а по объявлению (тут второй скрин) можно пофиксить. Делается это достаточно просто
defer func() {
fmt.Printf("Num is %d\n", num)
}()
Таким образом, мы вместо того что бы сразу передать значения из текущего скоупа вызываемой функции – вызываем анонимную функцию без параметров.
Сама эта анонимная функция будет выполнена на момент завершения функции и будет иметь скоуп родительской
Немного о
defer в Golang
defer это что то вроде комманды для отложенного выполнения действия. Вы заранее можете объявить что сделать на завершение функции (выход из её скоупа)
Проблемы с defer
===============
defer даёт не всегда предсказуемый результат и прежде чем пихать его в функции стоит разобраться в том, какое поведение от него стоит ожидать, что бы потом не тратить время на дебаг.
Неочевидным результат выполнения его работы может стать достаточно легко. Например:
var num int32 = 10
defer fmt.Printf("Num is %d\n", num)
num = 5
Здесь мы объявили число num = 0, вызвали defer, а после этого изменили число.
Однако в данном случае defer не знает, что число изменилось и выведет Num is 0
Следующий момент, который стоит учесть при разработке, это порядок выполнения нескольких defer в одной функции. defer будут выполняться в обратном порядке от объявления => первый объявленные defer будет запущен последним.
Например, если вы запустите.
defer fmt.Println("one")
defer fmt.Println("two")
defer fmt.Println("three")
то вывод вы получите в обратном порядке =>
three
two
one
defer не влияет на ретёрн. Если вы решили переобъявить значение которое хотите вернуть в defer – то ничего не переобъявится, а просто вернётся значение до defer
И да ясно, что лучше вообще не писать код, где может возникнуть путаница с defer, я бы лично вообще посоветовал минимизировать количество функций, в которых более одного defer. Однако знать о нюансах его использования лучше заранее, что бы потом не дебажить плохой код днями, а сразу знать куда костыль подложить