Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menyelesaikan Ralat Jenis Apabila Menggunakan Jenis Terkandas sebagai Argumen dalam Fungsi Go?

Bagaimana untuk Menyelesaikan Ralat Jenis Apabila Menggunakan Jenis Terkandas sebagai Argumen dalam Fungsi Go?

Patricia Arquette
Patricia Arquetteasal
2024-10-27 02:43:03152semak imbas

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

Menggunakan Jenis Terkekang sebagai Argumen dalam Fungsi

Dalam Go 1.18, generik menyediakan cara untuk menentukan jenis dengan parameter jenis, terhad kepada jenis tertentu set. Walau bagaimanapun, anda mungkin menghadapi ralat apabila menggunakan jenis terkurung sebagai hujah kepada fungsi yang mengharapkan jenis konkrit. Mari kita teroka penyelesaian menggunakan penukaran jenis.

Pertimbangkan contoh yang disediakan:

<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>

Apabila anda cuba menyusun atur cara ini, anda akan menghadapi ralat kerana c.AttackPower adalah jenis F dikekang kepada float64, tetapi yang lain.ReceiveDamage() menjangkakan hujah float64.

Untuk menyelesaikan isu ini, anda perlu menukar secara eksplisit c.AttackPower kepada jenis konkrit yang memenuhi Float. Dalam kes ini, kedua-dua float32 dan float64 memenuhi kekangan, jadi anda boleh menukar kepada salah satu.

Kaedah yang dikemas kini menjadi:

<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>

Dengan penukaran ini, atur cara akan berjaya disusun. Ambil perhatian bahawa apabila membuat instantiat jenis Charmander, anda mesti menentukan jenis konkrit yang F harus diikat, seperti *Charmander[float64].

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat Jenis Apabila Menggunakan Jenis Terkandas sebagai Argumen dalam Fungsi Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn