defaults write kCFPreferencesAnyApplication TSMLanguageIndicatorEnabled 0
linux память
сколько оперативки пожирает
ps -eo pid,comm,%mem,%cpu --sort=-%mem | head -n 20
ps aux --sort=-%mem | awk 'NR==1 || $4>0 {print $0}'
сколько свободно
free -h
отключить своп
sudo swapoff -a
диск, кто читает
pidstat -d 1 10
iostat -x 1 10
скорость диска
sudo hdparm -Tt /dev/sda
Удалить звук из файла
brew install ffmpeg ffmpeg -i 1.mp4 -an output.mp4
keepalive
sudo nano /etc/ssh/sshd_config ClientAliveInterval 60 ClientAliveCountMax 2 sudo systemctl restart sshd
и еще sudo mtr 17.253.144.10
golang
package main
import "fmt"
func main() {
status := GetPlan(1)
fmt.Println(status)
}
func GetPlan(id int) string {
return [...]string{
"plan1",
"plan2",
"plan3",
}[id-1]
}
Server Sent Event (SSE) with Go
Source https://github.com/evgensr/sse
package main
import (
"fmt"
"net/http"
"time"
)
func main() {
http.HandleFunc("/events", eventsHandler)
http.ListenAndServe(":8080", nil)
}
func eventsHandler(w http.ResponseWriter, r *http.Request) {
// Set CORS headers to allow all origins. You may want to restrict this to specific origins in a production environment.
w.Header().Set("Access-Control-Allow-Origin", "*")
w.Header().Set("Access-Control-Expose-Headers", "Content-Type")
w.Header().Set("Content-Type", "text/event-stream")
w.Header().Set("Cache-Control", "no-cache")
w.Header().Set("Connection", "keep-alive")
// Simulate sending events (you can replace this with real data)
for i := 0; i < 10; i++ {
fmt.Fprintf(w, "data: %s\n\n", fmt.Sprintf("Event %d", i))
time.Sleep(2 * time.Second)
w.(http.Flusher).Flush()
}
// Simulate closing the connection
closeNotify := w.(http.CloseNotifier).CloseNotify()
<-closeNotify
}
<!DOCTYPE html>
<html>
<head>
<title>SSE Example</title>
</head>
<body>
<div id="sse-data"></div>
<script>
const eventSource = new EventSource('http://localhost:8080/events');
eventSource.onmessage = function(event) {
const dataElement = document.getElementById('sse-data');
dataElement.innerHTML += event.data + '<br>';
};
</script>
</body>
</html>
Тестирование HTTP API
Hypert — это библиотека Go с открытым исходным кодом, которая упрощает тестирование клиентов HTTP API.
Она предоставляет удобный способ создания и воспроизведения HTTP запросов, и значительно упрощает создание надежных тестов для ваших клиентов API.
▪Запись и воспроизведение тестов
▪Автоматическое удаления конфиденциальной информации
▪Проверка запросов для обеспечения их целостности
▪Полная интеграция с GO протоколом http.Client
▪Легко расширяемые и настраиваемые опции
go get github.com/areknoster/hypert
Оптимизация кода golang
Когда мы фильтруем фрагменты в Go, типичным решением является создание нового фрагмента для отфильтрованных элементов (var filtered []int).
Однако этот метод приводит к дополнительному выделению памяти, потому что мы создаём пустой слайс, и при каждом добавлении элемента нужно будет заново аллоцировать память.
Более разумным способом решения этой проблемы является такое создание filtered := numbers[:0]
Так мы создадим слайс с ёмкостью numbers и избегаем дополнительных выделений памяти в дальнейшем
В выражении numbers[:0], 0 указывает на индекс, до которого (не включая его) будут скопированы элементы из среза numbers. По сути, это создает новый срез, который имеет ту же емкость, что и исходный срез numbers, но не содержит никаких элементов.
Вот как это работает:
numbers[:]создает копию срезаnumbers, включая все его элементы.numbers[:n], гдеn— это неотрицательное целое число, создает новый срез, который содержит первыеnэлементовnumbers.numbers[:0]создает новый срез, который не содержит элементов, но имеет ту же емкость, что иnumbers. Это означает, что при добавлении элементов в срезfilteredс помощью функцииappendпамять будет выделена из исходного массива, который лежит в основе срезаnumbers, до тех пор, пока не будет превышена его емкость.
Обновить все пакеты
go get -u ./...
Состоялся релиз Go 1.22
Состоялся релиз Go 1.22
Теперь range по int
for i := range 10 {
println(i)
}