1. Куча / Говнокод #19426

    −2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    type Speaker interface {
        SayHello()
    }
    
    type Human struct {
        Greeting string
    }
    
    func (Human) SayHello() {
        fmt.Println("Hello")
    }
    ...
    var s Speaker
    s = Human{Greeting: "Hello"}
    s.SayHello()

    Отсюда: https://habrahabr.ru/post/276981/

    Запостил: Abbath, 10 Февраля 2016

    Комментарии (14) RSS

    • А что тут такого? Ну, можно было
      s := Human{"Hello"}
      , но смысле тот же.
      И очень редко нужно, чтобы структура имплементила интерфейс, обычно указатель на структуру (но опять же, не обязательно, для детского примера покатит).

      Но вот автор статьи Яву плохо знает, и несет чушь. В Яве можно не имплементировать интерфейс явно, но если потом к нему кастовать, то каст сработает. Так что в этом смысле Го ничего отличного не предлагает.
      Ответить
      • > В Яве можно не имплементировать интерфейс явно, но если потом к нему кастовать, то каст сработает.

        С каких это пор?

        http://ideone.com/ZeXvug
        Ответить
        • http://ideone.com/uUDNC7

          и на самом деле. в прошлом (по старой памяти) в жабе конверсия работала, а вылетало только при использовании. (почему подобный код нужно было instanceof везде обвешивать.)

          но конкретно про возможность такого вызова я уже не помню. можно попробовать глянуть в выхлоп дизассемблера как именно метод вызывается: если через интерфейс, то точно не будет работать.
          Ответить
        • 1. Интерфейс не реализован. (методы должны быть public).
          2. Нужно просто добавить класс-обертку, типа
          http://ideone.com/UEbLO8
          .
          Ответить
          • Отредактировала, сделала метод public, результат тот же. А подкласс-то, естественно, можно сделать, но это будет уже другой класс, вполне себе реализующий интерфейс явно.
            Ответить
            • Ну реализует-то не обертка. Да и с точки зрения программиста: разница в одну строку. При том сколько бесполезного кода нужно писать на Яве - никто и не замтетит.
              Ответить
      • Greeting не используется нигде.
        Ответить
    • чем больше я вижу го, тем меньше он меня привлекает.

      там вообще какие-нибудь интересные фичи/либы есть?

      ЗЫ это же в го бул выражение в if запрещено брать в скобки?
      Ответить
      • Зеленые треды. Простота.
        Ответить
      • Хз. Го это вроде как улучшенная версия Си. В том смысле, что если Си - это примерно как если заранее запомнить всю карту, а потом ходить по городу с закрытми глазами, считая шаги, то Го, это то же самое, но каждые сто шагов можно открыть один глаз на секунду.

        Есть сборщик мусора, но нет нормального отладчика.
        Есть интерфейсы, но по-настоящему полиморфизма нет, уровень энтропии в коде очень близок к Яве (код очень часто повторяется).
        Есть много магии в виде штатных функций, которые делают что-то такое, что никакая другая пользовательская функция не сможет.
        Есть много бесполезных возможностей. Например, можно послать сигнал в несуществующий канал: такая програма становится неуправляемой, и сделать с ней изнутри ничего нельзя. Или можно объявить метод у функции, но ничего полезного в этом методе сделать нельзя.
        Ответить
        • Жесть. Но я честно говоря как то другого и не ожидал. Когда первый раз Go представляли, презентация одного из авторов в сети лежала. Я слайды все прочитал - улучшенный С все хотят, и я не исключение - но блин они были полны полного бреда. В половине слайдов о новом синтаксе автор как если бы открыто хвастался "а вот посмотрите как мы здесь с С не совместимы! и вот здесь тоже!! и вот тут мы тоже извернулись!!!" Другими словами, как если бы фокус был сломать С, а не его пофиксить...
          Ответить
          • О, еще есть неработающие перечисления: перечисление можно объявить как таковое (ну, почти), но в любой момент выполнения программы к нему можно добавить новые члены.
            Есть много инструментов для навигации по коду и анализа, есть хорошая интеграция с редакторами, но код нельзя выполнять интерактивно.
            Есть инструмент для автоформатирования кода, но его выхлоп сомнительного качества (и практически все им пользуются).
            В Го можно писать или не писать ;. С примерно такими же последствиями как и в ж.скрипте с той разницей, что в Го принято скорее не писать.
            Ответить
            • >>но в любой момент выполнения программы к нему можно добавить новые члены.

              У-у-у, мужеложник!.. Бог покарает всех грешников!
              Ответить

    Добавить комментарий