Home > Backend Development > Golang > How to get a reference to a concrete type from a reference to an interface

How to get a reference to a concrete type from a reference to an interface

王林
Release: 2024-02-09 16:39:14
forward
898 people have browsed it

How to get a reference to a concrete type from a reference to an interface

In PHP, an interface is an abstract class that defines a set of methods. We can ensure that a class has specific behavior by implementing an interface. However, sometimes we need to get a reference to a concrete type from a reference to an interface. This may cause some confusion in some cases. So, this article will show you how to get a reference to a concrete type from a reference to an interface. Whether you are a beginner or an experienced developer, this article will help you. Next, let’s get down to business and explore the solution to this problem.

Question content

I'm trying to understand how methods, interfaces and concrete types work in go.

For example, here.

My code is:

type i interface {mymethod(....)}
type a struct{i i....} 
func (a *a) mymethod(....) {
}
Copy after login

So a implements interface i.

In client code:

i := somefunction(....) // i is of type I
i.MyMethod(....)
Copy after login

How to get the reference to a from i?

Solution

  • A set of method signatures is stored in the interface type. Any implementation of a method defined in an interface can be stored as its value.

  • If the variable is defined using an interface type, can access the methods defined in the interfaceand other methods associated with the implemented typecannot be accessed.

interface:

type i interface {
    value() string
}
Copy after login

Implementation:

type a string

func(a a) value() string {
    return string(a)
}

func (a a) type() string {
 return  reflect.typeof(a).name()
}

Copy after login

In client code:

    // define a variable with the type of i.
    var a i = a("a") 

    // method value() defined in the i interface can be
    // called.
    value := a.value()

     // method type() can not be called, because it is not defined in the interface.
    typ := a.type()

Copy after login

Note: If you use a pointer receiverimplementation method as shown below. You need to assign the implemented pointer to i.

Implementation:

type a string
func(a *a) value() string {
  return string(a)
}
Copy after login

In client code:

 a := A("a")
 var i I = &a 
Copy after login

The above is the detailed content of How to get a reference to a concrete type from a reference to an interface. For more information, please follow other related articles on the PHP Chinese website!

source:stackoverflow.com
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