Лайфхаки для кода без побочных эффектов: пишем на Go и красиво, и правильно

Поділитися
Вставка
  • Опубліковано 31 тра 2024
  • Go - замечательный язык, на котором можно писать простые, красивые и высокоэффективные программы. Надо только научиться писать на нем просто. Этот доклад от Влада Белогрудова из YADRO содержит набор хороших практик для работы с функциями, переменными и типами данных.
    00:00 - о докладчике и теме выступления
    01:50 - правильный способ получить что-то из функции
    03:35 - как запретить функции модификацию аргументов
    06:40 - когда аргументы будут все равно изменяемыми (и почему)
    13:50 - эксперимент: насколько большие данные нужно передавать в функцию, чтобы перейти от копирования значения в передачу по адресу
    17:35 - что лучше возвращать: объекти или указатель (с экспериментом)
    21:40 - про escape analysis в компиляторе
    23:45 - кратко про методы в Go (и чем они похожи на функции)
    26:10 - базово про интерфейсы в Go
    28:25 - про производительность интерфейсов (с примером)
    32:35 - все главное о функциях, методах и интерфейсах в паре примеров и одной табличке
    35:00 - простое правило написания хорошего кода на Go
    35:55 - вопросы докладчику
  • Наука та технологія

КОМЕНТАРІ • 9

  • @artmon2004
    @artmon2004 8 місяців тому +11

    Какой интересный дядя, спасибо много моментов открыл, очень структурно👍

    • @ultimate_engineer
      @ultimate_engineer  7 місяців тому

      Рады, что понравился доклад! Рекомендуем еще прочесть статью Владислава на нашем портале: engineer.yadro.com/article/tips-for-go/

  • @nicolaep
    @nicolaep 28 днів тому

    Спасибо, некоторые вещи стали понятнее.

  • @chasubavil
    @chasubavil 11 місяців тому +1

    28:23 Здесь бы примерчик для наглядности... Пару таких структур со значениями. А до этого вообще шикарно, спасибо докладчику, очень живое выступление!

  • @evgeniysergeev9701
    @evgeniysergeev9701 9 місяців тому +9

    26:26 Идеоматично писать не type Animal interface{ Speak() }, а type Speaker interface{ Speak() } - если в интерфейсе один метод, то и называется он исходя из сигнатуры этого метода

  • @gooseman5578
    @gooseman5578 6 місяців тому

    20:55 почему стековое "копирование", там же ничего не копируется, просто адрес возвращает (в C++ так)

    • @vbelogrudov
      @vbelogrudov 6 місяців тому

      Допустим, у нас автопеременная в стеке функции, мы возвращаемся из функции и хотим отдать содержимое этой переменной в вызывающую нас функцию. Если мы отдадим адрес в стеке, который при выходе из функции будет разрушен, мы в себя рано или поздно выстрелим (С/С++). Мы можем безопасно передавать адрес стековой переменной только дальше в вызываемые нами функции, так как стек все еще жив. Мы можем скопировать содержимое этой переменной в вызывающий нас стек - это так и в С и в С++ и в Го. Другое дело если отдаем стековую переменную обратно в вызывающую функцию в случае C/C++ - там есть дополнительные оптимизации в виде RVO/NRVO, habr.com/ru/companies/vk/articles/666330/, где мы не делаем никаких экстра копирований / созданий лишних переменных. Что касается Го, компилятор опасные вещи ввиде возврата адреса локальной / автоматической переменной превращает в безопасные - эта стековая переменная на самом деле перестает быть стековой (сразу создается в куче), если идет возврат ее адреса (адрес в куче). В любом случае мы не отдаем в вызывающую функцию адрес из стека.

  • @UAStriker
    @UAStriker 7 місяців тому +3

    Время от времени звук пропадает на пол секунды. Не ну е-мое, 2023 год на дворе, а звук пропадает🤯

  • @funky_hedgehog
    @funky_hedgehog Місяць тому

    Проще уж на Rust написать тогда