Go 1.18에서 제한된 유형을 인수로 사용
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 }</code>
여기서 Charmander는 일반 유형을 사용하여 Pokemon 인터페이스를 구현합니다. float32 또는 float64로 인스턴스화할 수 있는 유형 매개변수 F입니다. 그러나 other.ReceiveDamage()에서 AttackPower(제한된 유형)를 float64 인수로 사용하려고 하면 오류가 발생합니다.
<code class="go">func (c *Charmander[float64]) InflictDamage(other Pokemon) { other.ReceiveDamage(c.AttackPower) }</code>
호환성을 위한 유형 변환
이 문제를 해결하려면 제한된 유형과 함수에서 예상하는 구체적인 유형 간의 호환성을 보장하기 위해 유형 변환을 사용해야 합니다. 이는 float64로 제한된 경우에도 F가 float64와 동일하지 않기 때문입니다.
수정된 코드는 다음과 같습니다.
<code class="go">func (c *Charmander[T]) InflictDamage(other Pokemon) { other.ReceiveDamage(float64(c.AttackPower)) }</code>
마찬가지로, ReceiverDamage() 메서드는 제한된 유형( Health) 손상 인수를 제한된 유형으로 변환하여:
<code class="go">func (c *Charmander[T]) ReceiveDamage(damage float64) { c.Health -= T(damage) }</code>
정밀도 고려 사항
float64에서 float32로 변환된다는 점에 유의하는 것이 중요합니다(F float32로 인스턴스화됨)은 정밀도가 손실될 수 있습니다. 특정 사용 사례에서는 이를 고려해야 할 수도 있습니다.
위 내용은 Go 1.18 Generics에서 제한된 유형을 인수로 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!