제한된 유형을 함수의 인수로 사용
Go 1.18에서 제네릭은 특정 유형으로 제한되는 유형 매개변수로 유형을 정의하는 방법을 제공합니다. 세트. 그러나 제한된 유형을 구체적인 유형이 필요한 함수에 대한 인수로 사용하면 오류가 발생할 수 있습니다. 유형 변환을 사용하여 솔루션을 살펴보겠습니다.
제공된 예를 고려하십시오.
<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>
이 프로그램을 컴파일하려고 하면 c.AttackPower가 F 유형이기 때문에 오류가 발생합니다. float64로 제한되지만 other.ReceiveDamage()는 float64 인수를 기대합니다.
이 문제를 해결하려면 c.AttackPower를 Float를 충족하는 구체적인 유형으로 명시적으로 변환해야 합니다. 이 경우 float32와 float64는 모두 제약 조건을 충족하므로 둘 중 하나로 변환할 수 있습니다.
업데이트된 메서드는 다음과 같습니다.
<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>
이러한 변환을 사용하면 프로그램이 성공적으로 컴파일됩니다. Charmander 유형을 인스턴스화할 때 *Charmander[float64]와 같이 F가 바인딩되어야 하는 구체적인 유형을 지정해야 합니다.
위 내용은 Go 함수에서 제한된 유형을 인수로 사용할 때 유형 오류를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!