Satont.
300 subscribers
318 photos
52 videos
1 file
201 links
Download Telegram
Старый vs новый ссд.
🆒5👍2
1
Please open Telegram to view this post
VIEW IN TELEGRAM
Клавиатуру новую хочу пизда.
Давайте вы малюкте попрошайке поможете купить её?

https://boosty.to/yakui/single-payment/donation/546412?share=target_link
🫡2
Satont.
Сделать публичный плей-лист на ютубе для вас, который буду пополнять?
Сборник днб миксов\сэтов которые я рекоммендую к прослушиванию.

https://www.youtube.com/playlist?list=PL3qfVPfMnrn6y30FoOe_Whw_eJZRo9EE6
51
Satont.
https://twitch.tv/neuropunkenjoyer
Вод оставил, кому интересно.
1
Нормально Маск угарает.

Добавили звонки в X (twitter), и при звонке оно показывает айпишники собеседующих.

По стандарту звонки там включены.

Собственно зачем они включены по дефолту, и зачем оно показывает айпи? Кринж.
Chipi chipi chapa chapa.

https://twitch.tv/neuropunkenjoyer
Satont.
Chipi chipi chapa chapa. https://twitch.tv/neuropunkenjoyer
Опубликовал сегоднящний ВОД.
👍3
В go 1.22 затерялось изменение cmp пакета среди минорных изменений.

Оказывается, появился cmp.Or, который сравнивает значения одного типа и возвращает первое non zero значение.

// вернёт default
cmp.Or("", "default")

// вернёт "hey satont"
cmp.Or("hey satont", "default")

// вернёт 1
cmp.Or(0, 1)

То есть работает оно как || в js.

Меня радует, как в std go появляется всё больше и больше методов, которые часто приходилось писать самому. Так они ещё и все на генериках!
3
В догонку кину вам пример из доки, что можно полезного с этим сделать помимо простого сравнения.
func main() {
type Order struct {
Product string
Customer string
Price float64
}
orders := []Order{
{"foo", "alice", 1.00},
{"bar", "bob", 3.00},
{"baz", "carol", 4.00},
{"foo", "alice", 2.00},
{"bar", "carol", 1.00},
{"foo", "bob", 4.00},
}
// Sort by customer first, product second, and last by higher price
slices.SortFunc(orders, func(a, b Order) int {
return cmp.Or(
cmp.Compare(a.Customer, b.Customer),
cmp.Compare(a.Product, b.Product),
cmp.Compare(b.Price, a.Price),
)
})
for _, order := range orders {
fmt.Printf("%s %s %.2f\n", order.Product, order.Customer, order.Price)
}

}


Output:

foo alice 2.00
foo alice 1.00
bar bob 3.00
foo bob 4.00
bar carol 1.00
baz carol 4.00
👍2
Кстати, тут же сидят не только гоферы и джаваскриптеры.

В каких языках есть роутеры для http в стандартной библиотеке, ещё и с поддержкой path параметров? Спрашиваю только из интереса.

Go с версии 1.22 позволяет сделать так:

http.HandleFunc("GET /hello/{name}", func (w http.ResponseWriter, r *http.Request) {
nameString := req.PathValue("name")
fmt.Fprintf(w, "Hello, %q", html.EscapeString(nameString))
})
🔥1
"программирование мертво?", "рынку айти конец?".
💯6
Satont.
"программирование мертво?", "рынку айти конец?".
Вокруг этого уже кстати появились роутеры без зависимостей.

Например этот позволяет делать группировку, мидлвари на группы и отдельные роуты https://go-pkgz.umputun.dev/routegroup/


mux := http.NewServeMux()
group := routegroup.New(mux)

// допустим группа для отрисовки html
group.Use(loggingMiddleware, corsMiddleware)
group.Handle("/tasks", tasksHandler)
group.Handle("/users", usersHandler)

// группа апи
apiGroup := routegroup.Mount(mux, "/api")
apiGroup.Use(loggingMiddleware, corsMiddleware)
apiGroup.Handle("/v1", apiV1Handler)

// роут с мидлварями только для него
apiGroup.With(authMiddleware).Handle("DELETE /users/{id}", deleteHandler)
http.ListenAndServe(":8080", mux)


// ещё вот такой апи для груп
group.Set(b func(*routegroup.Bundle) {
b.Use(loggingMiddleware, corsMiddleware)
b.Handle("GET /hello", helloHandler)
b.Handle("GET /bye", byeHandler)
})
👍1