Wie erhalte ich einen Typdeskriptor in Go ohne Instanz?

Patricia Arquette
Freigeben: 2024-10-30 20:11:03
Original
144 Leute haben es durchsucht

How to Get a Type Descriptor in Go Without an Instance?

TypeOf ohne Instanz

Beim Arbeiten mit Go ist es nützlich, die Darstellung eines Typs ohne vorhandene Instanz zu erhalten. Dies kann mithilfe von Reflexionstechniken erreicht werden.

TypeOf mit einem typisierten Nil verwenden

Der Knackpunkt besteht darin, mit einem Zeiger auf den gewünschten Typ zu beginnen und ihn in Null umzuwandeln. Dadurch wird ein typisierter Nullwert erstellt, der es uns ermöglicht, mit der Elem()-Methode auf den Basistyp zuzugreifen.

<code class="go">t := reflect.TypeOf((*int)(nil)).Elem()
fmt.Println(t) // Output: int</code>
Nach dem Login kopieren

Beispielverwendung

Bedenken Sie zur Veranschaulichung Folgendes ParamReader-Struktur:

<code class="go">type ParamReader struct {
    // The request from which to extract parameters
    context *http.Request
}

func (p *ParamReader) Require(s string, t reflect.Type) {
    // Validation logic omitted for brevity
}</code>
Nach dem Login kopieren

Innerhalb der Require()-Methode können wir „reflect.TypeOf()“ mit typisierten Nullzeigern verwenden, um Parametertypen zu überprüfen:

<code class="go">if( t == reflect.TypeOf((*uint64)(nil)) {
    // Validation logic for uint64
}</code>
Nach dem Login kopieren

Alternative mit Benutzerdefinierter Typ

Anstatt Rohtypen zu übergeben, ist es praktisch, einen benutzerdefinierten Typ zu verwenden, der bestimmte Typen kapselt. Dies kann mit einer einfachen enum-ähnlichen Struktur erreicht werden:

<code class="go">type TypeDesc int

const (
    TypeInt TypeDesc = iota
    TypeHttpRequest
    TypeOsFile
    TypeInt64
)</code>
Nach dem Login kopieren

Verwendung von Konstanten

Aus Effizienzgründen wird empfohlen, vordefinierte Konstanten zu verwenden, anstatt Typen dynamisch zu erstellen.

<code class="go">const (
    TypeInt int = iota
    TypeHttpRequest
    TypeOsFile
    TypeInt64
)</code>
Nach dem Login kopieren

Fazit

Durch die Nutzung von Reflexionstechniken und den strategischen Einsatz typisierter Nullwerte ist es möglich, Typdeskriptoren ohne Instanz zu erhalten. Dies eröffnet verschiedene Möglichkeiten zur Laufzeittypprüfung und -validierung, wie im ParamReader-Beispiel gezeigt.

Das obige ist der detaillierte Inhalt vonWie erhalte ich einen Typdeskriptor in Go ohne Instanz?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!