Go 1.18 제네릭의 함수 인수로서의 제한된 유형
Go 1.18의 제네릭은 강력한 유형 제약을 제공하므로 개발자는 다음을 사용하여 사용자 정의 유형을 정의할 수 있습니다. 특정 행동. 그러나 이러한 제한된 유형을 구체적인 유형이 필요한 함수에 대한 인수로 사용하면 컴파일 오류가 발생할 수 있습니다.
문제:
Charmander 구조체가 정의된 예제를 고려하세요. 유형 매개변수 F를 사용하여 일반 유형으로 사용합니다. IntributeDamage 메소드를 사용하여 Charmander의 공격력을 사용하여 피해를 입히려고 시도하면 컴파일러에서 오류가 발생합니다.
오류 메시지:
cannot use c.AttackPower (variable of type float64 constrained by Float) as float64 value in argument to other.ReceiveDamage compiler(IncompatibleAssign)
이 오류는 InflectDamage 메소드가 float64 인수를 기대하지만 AttackPower 변수가 제한된 유형인 F이기 때문에 발생합니다.
해결책:
이 오류를 해결하려면 유형 변환을 사용해야 합니다. 제한된 유형 F는 개정된 코드에 표시된 대로 해당 값을 명시적으로 캐스팅하여 float64로 변환할 수 있습니다.
func (c *Charmander[T]) ReceiveDamage(damage float64) { c.Health -= T(damage) } func (c *Charmander[T]) InflictDamage(other Pokemon) { other.ReceiveDamage(float64(c.AttackPower)) }
이러한 변환은 float64가 float32 및 float64 모두와 호환되기 때문에 유효합니다. 유형 매개변수 F입니다. F가 float32로 인스턴스화되면 F를 float64로 명시적으로 캐스팅하면 정밀도가 손실될 수 있다는 점에 유의하는 것이 중요합니다.
위 내용은 다음은 기사 내용에 맞는 몇 가지 질문 기반 제목입니다. * Go 1.18 Generics에서 제한된 유형을 함수 인수로 사용하는 방법: 이 제목은 다음을 강조하는 직접적이고 유익한 제목입니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!