Я не нашел хорошего ресурса для использования interface{}
типов. Например
package main
import "fmt"
func weirdFunc(i int) interface{} {
if i == 0 {
return "zero"
}
return i
}
func main() {
var i = 5
var w = weirdFunc(5)
// this example works!
if tmp, ok := w.(int); ok {
i += tmp
}
fmt.Println("i =", i)
}
Вы знаете хорошее введение в использование Go interface{}
?
конкретные вопросы:
- как мне получить "настоящий" Тип w?
- есть ли способ получить строковое представление типа?
- есть ли способ использовать строковое представление типа для преобразования значения?
types
type-conversion
go
cc молодой
источник
источник
reflect.TypeOf
.Вы также можете сделать переключатели типов:
источник
Вы можете использовать Reflection (
reflect.TypeOf()
), чтобы получить тип чего-либо, а значение, которое оно дает (Type
), имеет строковое представление (String
метод), которое вы можете распечатать.источник
fmt
формат "% T" вместо прямого использованияreflect
.Вот пример декодирования универсальной карты с использованием как переключателя, так и отражения, поэтому, если вы не соответствуете типу, используйте отражение, чтобы выяснить это, а затем добавьте тип в следующий раз.
источник
Переключатели типа также могут использоваться с отражением:
источник
Я собираюсь предложить способ возврата логического значения, основанный на передаче аргумента вида отражения в приемник локального типа (потому что я не смог найти ничего подобного).
Во-первых, мы объявляем наш анонимный тип отражения типа.
Затем мы добавляем конструктор для нашего локального типа AnonymousType, который может принимать любой потенциальный тип (в качестве интерфейса):
Затем мы добавляем функцию для нашей структуры AnonymousType, которая утверждает против отражения.
Это позволяет нам вызывать следующее:
Вы можете увидеть более длинную рабочую версию здесь: https://play.golang.org/p/EIAp0z62B7
источник
Есть несколько способов получить строковое представление типа. Переключатели также могут использоваться с типами пользователей:
Ссылка на детскую площадку: https://play.golang.org/p/VDeNDUd9uK6
источник