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

Sdílet
Vložit
  • čas přidán 6. 06. 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 - вопросы докладчику
  • Věda a technologie

Komentáře • 9

  • @artmon2004
    @artmon2004 Před 8 měsíci +11

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

    • @ultimate_engineer
      @ultimate_engineer  Před 8 měsíci

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

  • @chasubavil
    @chasubavil Před 11 měsíci +1

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

  • @nicolaep
    @nicolaep Před měsícem

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

  • @evgeniysergeev9701
    @evgeniysergeev9701 Před 9 měsíci +9

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

  • @gooseman5578
    @gooseman5578 Před 6 měsíci

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

    • @vbelogrudov
      @vbelogrudov Před 6 měsíci

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

  • @UAStriker
    @UAStriker Před 7 měsíci +3

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

  • @funky_hedgehog
    @funky_hedgehog Před měsícem

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