Maison  >  Article  >  développement back-end  >  Tableau de structure hérité dans Go Lang

Tableau de structure hérité dans Go Lang

WBOY
WBOYavant
2024-02-09 09:15:221258parcourir

Go Lang 中继承的结构体数组

Go Lang est un langage de programmation moderne qui a rapidement émergé dans le monde de la programmation pour sa simplicité et son efficacité. En Go Lang, la structure est un type de données courant qui peut être utilisé pour organiser et stocker un ensemble de données associées. Cependant, dans certains cas, nous pouvons avoir besoin de définir un tableau contenant plusieurs structures, d'opérer sur elles et d'en hériter. Cet article expliquera comment créer et utiliser des tableaux de structures héritées dans Go Lang pour mieux faire face aux structures de données complexes et aux besoins de programmation.

Contenu de la question

Récemment, j'ai commencé à créer un jeu d'échecs en golang et un problème auquel j'ai été confronté était de stocker différents personnages (c'est-à-dire un pion, un chevalier, un roi) dans un seul tableau.

package main

import "fmt"

type character struct {
    currposition [2]int
}

type knight struct {
    c character
}

func (k knight) move() {
    fmt.println("moving kinght...")
}

type king struct {
    c character
}

func (k king) move() {
    fmt.println("moving king...")
}

Dans l'exemple ci-dessus, pouvons-nous mettre le chevalier et le roi dans le même tableau puisqu'ils héritent de la même classe de base ?

J'aime

characters := []character{Knight{}, King{}}

Solution de contournement

Utilisez Interface de base comme Polymorphisme.

type character interface {
    move()
    pos() [2]int
}

type knight struct {
    pos [2]int
}

func (k *knight) move() {
    fmt.println("moving kinght...")
}

func (k *knight) pos() [2]int { return k.pos }

type king struct {
    pos [2]int
}

func (k *king) move() {
    fmt.println("moving king...")
}

func (k *king) pos() [2]int { return k.pos }

Les déclarations suivantes sont compilées avec ce changement :

characters := []character{&Knight{}, &King{}}

De plus, vous aurez peut-être besoin d'un récepteur pointeur comme dans cet exemple.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer