首頁 >後端開發 >Golang >Go Lang 中繼承的結構體數組

Go Lang 中繼承的結構體數組

WBOY
WBOY轉載
2024-02-09 09:15:221310瀏覽

Go Lang 中继承的结构体数组

Go Lang 是一種現代化的程式語言,它以其簡潔高效的特點在程式設計界迅速嶄露頭角。在 Go Lang 中,結構體(Struct)是一種常見的資料類型,它可以用來組織和儲存一組相關的資料。然而,在某些情況下,我們可能需要定義一個包含多個結構體的數組,並對其進行操作和繼承。本文將為大家介紹在 Go Lang 中如何建立和使用繼承的結構體數組,以便更好地應對複雜的資料結構和程式需求。

問題內容

最近我開始用 golang 建立一款西洋棋遊戲,我面臨的一個問題是將不同的角色(即 pawn、knight、king)儲存在單一陣列中。

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...")
}

在上面的例子中,我們可以將 knight 和 king 放在同一個陣列中嗎,因為它們是從同一個基底類別繼承的?

喜歡

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

解決方法

使用基本介面作為多態性

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 }

以下語句經過此變更後進行編譯:

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

此外,您可能需要像本範例中的指標接收器。

以上是Go Lang 中繼承的結構體數組的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除