Home > Backend Development > Golang > How to Retrieve the `reflect.Type` of an Interface in Go?

How to Retrieve the `reflect.Type` of an Interface in Go?

DDD
Release: 2024-12-24 04:45:10
Original
736 people have browsed it

How to Retrieve the `reflect.Type` of an Interface in Go?

Retrieving the Reflect.Type of an Interface

Determining whether a type implements an interface through the reflect package entails passing a reflect.Type to reflect.Type.Implements(). This article explores the process of obtaining such types.

Obtaining the Type of an Uninitialized Interface

Attempting to retrieve the type of an uninitialized error interface (which is an interface type) using reflect.TypeOf() directly will result in a panic when attempting to access the Kind() method of the obtained type. To circumvent this issue, the following approaches can be employed:

Approach 1:

var err error
t := reflect.TypeOf(&err).Elem()
Copy after login

This approach involves obtaining the type of a pointer to the interface, and then retrieving the underlying concrete type (element) using Elem().

Approach 2 (One-Liner):

t := reflect.TypeOf((*error)(nil)).Elem()
Copy after login

This approach leverages the fact that a nil interface value can be type asserted to any interface type. By creating a nil pointer to the desired interface type and retrieving its type, you can directly obtain the concrete type without having to take the address of the variable.

The above is the detailed content of How to Retrieve the `reflect.Type` of an Interface in Go?. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template