How Can I Return a Concrete Type from an Interface Method in Go?

DDD
Release: 2024-10-26 22:23:03
Original
817 people have browsed it

 How Can I Return a Concrete Type from an Interface Method in Go?

Interface Method Returning Interface and Concrete Types

In Go, an interface method returning an interface offers flexibility for type implementations. However, attempting to implement such a method with a concrete type can lead to errors.

Consider the example:

<code class="go">func GetStringer() fmt.Stringer</code>
Copy after login

Where GetStringer is an interface method returning the fmt.Stringer interface.

If a concrete type, such as Foo, is implemented to return a value of itself (*Foo), an error is encountered. This is because Foo does not implement fmt.Stringer directly.

To resolve this issue, several approaches can be taken:

Using an Adapter Type

Create an adapter type that wraps the concrete type and conforms to the required interface:

<code class="go">type MyBar struct{ Bar }

func (b *MyBar) GetStringer() fmt.Stringer {
    return b.Bar.GetStringer()
}</code>
Copy after login

This approach allows for extension without modifying the original type Bar.

Wrapping with the Interface

Alternatively, the concrete type can be directly wrapped with the required interface:

<code class="go">func (b *Bar) GetStringer() fmt.Stringer {
    return &Foo{"foo"}
}</code>
Copy after login

Here, the concrete type Bar provides an implementation of the GetStringer method that returns an instance of the Foo type, which implements fmt.Stringer.

Both methods provide options for accommodating interface method returns with concrete types in Go. The appropriate approach depends on the specific requirements and architecture of the code.

The above is the detailed content of How Can I Return a Concrete Type from an Interface Method in Go?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
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
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!