How to Resolve Type Errors When Using Constrained Types as Arguments in Go Functions?

Patricia Arquette
Release: 2024-10-27 02:43:03
Original
160 people have browsed it

How to Resolve Type Errors When Using Constrained Types as Arguments in Go Functions?

Using Constrained Types as Arguments in Functions

In Go 1.18, generics provide a way to define types with type parameters, constrained to specific type sets. However, you may encounter an error when using constrained types as arguments to functions expecting concrete types. Let's explore a solution using type conversions.

Consider the example provided:

<code class="go">type Pokemon interface {
    ReceiveDamage(float64)
    InflictDamage(Pokemon)
}

type Float interface {
    float32 | float64
}

type Charmander[F Float] struct {
    Health      F
    AttackPower F
}

func (c *Charmander[float64]) ReceiveDamage(damage float64) {
    c.Health -= damage
}

func (c *Charmander[float64]) InflictDamage(other Pokemon) {
    other.ReceiveDamage(c.AttackPower)
}</code>
Copy after login

When you try to compile this program, you'll encounter an error because c.AttackPower is of type F constrained to float64, but other.ReceiveDamage() expects a float64 argument.

To resolve this issue, you need to explicitly convert c.AttackPower to a concrete type that satisfies Float. In this case, both float32 and float64 satisfy the constraint, so you can convert to either.

The updated methods become:

<code class="go">func (c *Charmander[T]) ReceiveDamage(damage float64) {
    c.Health -= T(damage)
}

func (c *Charmander[T]) InflictDamage(other Pokemon) {
    other.ReceiveDamage(float64(c.AttackPower))
}</code>
Copy after login

With these conversions, the program will compile successfully. Note that when instantiating the Charmander type, you must specify the concrete type that F should be bound to, such as *Charmander[float64].

The above is the detailed content of How to Resolve Type Errors When Using Constrained Types as Arguments in Go Functions?. 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
Latest Articles by Author
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!