oleg_log – Telegram
oleg_log
1.78K subscribers
1.85K photos
129 videos
9 files
2.76K links
Shelter for antisocial programmers "Oleg"

halp: @olegkovalov
web: https://olegk.dev
fov: @oleg_fov
chat: @oleg_log_blabla
podcast: @generictalks

about: https://news.1rj.ru/str/oleg_log/3200
Download Telegram
ммм, кружечка приехала.
дада, у меня хороший маникюр.
поделитесь какой у вас свэг крутой был?
Любопытный, но довольно бесполезный пример полиморфизма в Go

В гошечке есть несколько способов писать полиморфные функции:

1. интерфейсы;
2. тайп свитчи и тайп кастинг интерфейсов;
3. рефлексия;

Недавно мне понял, что есть чётвёртый подход, который стал возможен с появлением type alias — назовём его апкастингом типов. Работает оно так:

func main() {
printName(Cat{"Whiskey"})
printName(Dog{"Chappie"})
}

type Cat struct { Name string }

type Dog struct { Name string }

type named = struct { Name string }

func printName(n named) {
fmt.Println(n.Name)
}

В спеке Go указано, что присваивание x типа V к переменной типа T валидно в случае, если V и T основаны на одинаковых типах и T — не именованный тип ("x's type V and T have identical underlying types and at least one of V or T is not a defined type."). Псевдонимы типов не считются именованными типами, так что мы можем принимать в аргумент n любую кастуемую структуру.

К сожалению, это не слишком полезно — наверное только если вы не хотите делать пачку геттеров и у вас есть пачка одинаковых структур разных типов.
☕️ Мерлин заваривает τσάι 🐌
Любопытный, но довольно бесполезный пример полиморфизма в Go В гошечке есть несколько способов писать полиморфные функции: 1. интерфейсы; 2. тайп свитчи и тайп кастинг интерфейсов; 3. рефлексия; Недавно мне понял, что есть чётвёртый подход, который стал…
Чуть поясним. Прикол здесь в самом алиасе, для передачи Cat/Dog в printName их не надо явно приводить к named.

И на этом все. Как можете догадаться, если бы у Cat/Dog было еще 1 поле, то ничего бы не вышло, надо чтобы поля совпадали.

https://play.golang.org/p/xpyO7pE6ASv (уберите = и будем вам счастье)
не работа, а мечта
о да, ода уходящего года...
C + плюшки = Zig. Ну простой же как палка.

https://gist.github.com/ityonemo/769532c2017ed9143f3571e5ac104e50

Воодушевлено длиннопастой про Rust https://fasterthanli.me/articles/a-half-hour-to-learn-rust
(A half-hour to learn Rust, Jan 27, 2020 · 51 minute read. Нуда)
Вы ведь знаете, что в го надо аккуратно с переменными из for-range обращаться, да?

Наверное каждый хоть раз обжигался о
for k, v := range foo {
go func() { run(k,v) }()
}

или что-то похожее, где "захватывается" значение в кложуре. Есть даже пропозал, что давайте от этого уйдём (в го2, когдатотам) https://github.com/golang/go/issues/20733

Там забавный комент добавили, может слышали, Let's Encrypt недавно откатили 3М+ сертификатов. Угадайте из-за чего)))

https://github.com/letsencrypt/boulder/pull/4690/files#diff-d02067a9f9a2bed1110fd4e98641c2effcf5d1d5f18461e35d6ac1535f6e2c21L1411-R1414
oleg_log
А по случаю таких массовых гуляний - новый проект: @oleg_log_plus 🎉🎉🎉 Стало интересно вести патреоно-спонсируемый проект, на котором я буду делиться с вами постами, докладами и прочими видами информации, которые на мой взгляд пропускать не стоит, ведь все…
Подведём итоги ~1 месяца.

Все даже хорошо. Есть посты, за которые не стыдно. Есть приятные и критикующей-правильные отзывы. Есть желание продолжать дальше.

Хотя местами хочется уйти в дикие и непрактичные темы, но по большому счёту пользы от таких мало.

Для заинтересованных @oleg_log_plus
oleg_log
Вы ведь знаете, что в го надо аккуратно с переменными из for-range обращаться, да? Наверное каждый хоть раз обжигался о for k, v := range foo { go func() { run(k,v) }() } или что-то похожее, где "захватывается" значение в кложуре. Есть даже пропозал…
Внезапно многие не знали этой проблемы (кроме тех кто не пишут на го). Так вот.

Есть даж спец страница на вики про эту особенность (а сколько статей с пеной у рта это совсем другое).

Поэтому советую прочитать https://github.com/golang/go/wiki/CommonMistakes и включить scopelint (хотя мне кажется еще кто-то ругается) в golangci-lint
:slowpoke: там слак прилёг. https://status.slack.com/#

на самом деле теперь все веселее, там всё красное, хотя днём были только сообщ.
Карантин в 2020 положительно повлиял на меня (спорт, хобби, отношения, скмья, работа, тд). Перед тем как отвечать - подумайте полминуты. Спасибо.
Anonymous Poll
21%
Да
25%
Скорее да
11%
Не знаю
26%
Скорее нет
17%
Нет
Такс, ушастики мои. Кто хочет канкаренси задачку на Go ?

Там нет явного бага, но кое-что там сделано неправильно. Мы нашли это в тестовом задании, точнее там бага не было, нам показалось) Вам конечно же версию с багом принёс.

Подсказка для тех, кто не уверены в себе ZXJyb3IgcmV0dXJuZWQgaW4gZ29yb3V0aW5l

Собственно код https://play.golang.org/p/Ktcwsdlfyyj

Ответы лучше в бота, если хотите потестить себя @oleg_log_bot
Понравился сборничек Rust Design Patterns. Чем-то (но точно не оформлением) напомнило go-advice, который я медленно веду к новой версии.

https://rust-unofficial.github.io/patterns/intro.html

Чем-то еще напоминает https://nnethercote.github.io/perf-book/ но тут скорее про перформанс и попытки выжать наносекунды, чем о идиоматичности кода (хотя не противоречит).

Еще подобные ридми-книги-сборники вспомните?

Хоть домен и кричит unofficial, но это ничего не значит)
DALL·E: Creating Images from Text

https://openai.com/blog/dall-e/