Nie znalazłem dobrego źródła do używania interface{}
typów. Na przykład
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)
}
Czy znasz dobre wprowadzenie do korzystania z Go interface{}
?
szczegółowe pytania:
- jak uzyskać „prawdziwy” typ w?
- czy istnieje sposób, aby uzyskać ciąg reprezentujący typ?
- czy istnieje sposób na użycie reprezentacji ciągu typu do konwersji wartości?
types
type-conversion
go
cc młody
źródło
źródło
reflect.TypeOf
.Możesz także zmienić typ:
źródło
Możesz użyć refleksji (
reflect.TypeOf()
), aby uzyskać typ czegoś, a wartość, którą daje (Type
), ma reprezentację łańcuchową (String
metodę), którą możesz wydrukować.źródło
fmt
formatu "% T" zamiast bezpośredniego używaniareflect
.Oto przykład dekodowania mapy ogólnej przy użyciu przełącznika i odbicia, więc jeśli nie dopasujesz typu, użyj odbicia, aby to rozgryźć, a następnie dodaj typ następnym razem.
źródło
Przełączniki typu mogą być również używane z elementami odblaskowymi:
źródło
Mam zamiar zaoferować sposób na zwrócenie wartości logicznej w oparciu o przekazanie argumentu odbicia Kinds do odbiornika typu lokalnego (ponieważ nie mogłem znaleźć czegoś takiego).
Najpierw deklarujemy nasz anonimowy typ typu Reflect.
Następnie dodajemy konstruktora dla naszego typu lokalnego AnonymousType, który może przyjąć dowolny potencjalny typ (jako interfejs):
Następnie dodajemy funkcję do naszej struktury AnonymousType, która sprawdza przed reflektorem.
To pozwala nam zadzwonić do następujących:
Dłuższą, działającą wersję można zobaczyć tutaj: https://play.golang.org/p/EIAp0z62B7
źródło
Istnieje wiele sposobów uzyskania ciągu reprezentującego typ. Przełączniki mogą być również używane z typami użytkowników:
Link do placu zabaw: https://play.golang.org/p/VDeNDUd9uK6
źródło