Есть ли способ перечислить методы объекта в GoLang? [Дубликат]

Firebase Cloud Messaging полностью бесплатна. Единственные ограничения, с которыми вы столкнетесь, в значительной степени связаны с временем жизни сообщения и, как вы уже знаете, лимитом размера сообщения (4 КБ для data и 2 КБ для полезной нагрузки notification).

Существует Official Firebase Pricings Страница , где вы можете увидеть, что Cloud Messaging включена бесплатно для всех своих планов (бесплатные и премиальные), калькулятор калькуляции и часто задаваемые вопросы. Но большая часть ограничений для базы данных, хранилища и т. Д.


17
задан otiai10 2 August 2016 в 13:55
поделиться

1 ответ

Вы можете перечислить методы типа с помощью пакета reflect. Например:

fooType := reflect.TypeOf(Foo{})
for i := 0; i < fooType.NumMethod(); i++ {
    method := fooType.Method(i)
    fmt.Println(method.Name)
}

Вы можете играть с этим здесь: http://play.golang.org/p/wNuwVJM6vr

С этим в виду, если вы хотите проверить, реализует ли тип определенного набора методов, вам может быть проще использовать интерфейсы и утверждение типа. Например:

func implementsBar(v interface{}) bool {
    type Barer interface {
        Bar() string
    }
    _, ok := v.(Barer)
    return ok
}

...
fmt.Println("Foo implements the Bar method:", implementsBar(Foo{}))

Или, если вы просто хотите, что означает утверждение времени компиляции, которое имеет определенный тип, вы можете просто включить следующее:

var _ Barer = Foo{}
25
ответ дан James Henstridge 20 August 2018 в 10:03
поделиться
  • 1
    Большое спасибо!! Я не хотел использовать & quot; отражать & quot; пакет, поэтому ваше предложение с использованием интерфейса выглядит так круто для меня! – otiai10 28 January 2014 в 08:09