首頁 >後端開發 >Golang >為什麼我的 Go struct 沒有實作介面:方法參數不符?

為什麼我的 Go struct 沒有實作介面:方法參數不符?

Barbara Streisand
Barbara Streisand原創
2024-12-04 12:28:11541瀏覽

Why Doesn't My Go Struct Implement the Interface: Mismatched Method Parameters?

方法參數不匹配導致介面實現障礙

問題:

在Go 程式中,結構體無法實現介面的原因是參數不匹配結構體中的方法參數類型和介面。

解決方案:

對於實作介面的結構,其方法必須與介面中定義的方法簽章精確匹配。這不僅包括方法名稱和傳回類型,還包括參數類型。

在提供的程式碼中,D 結構的 Connect 方法採用 (*C) 參數而不是 (A) 參數,如下所示它所要實現的 B 介面所需要的。這種不匹配會導致錯誤。

要解決此問題,必須修改 Connect 方法以匹配介面的簽章:

package main

import "fmt"

type A interface {
    Close()
}

type B interface {
    Connect() (A, error)
}

type C struct {
}

func (c *C) Close() { fmt.Println("Closing C") }

type D struct {
}

func (d *D) Connect() (A, error) {
    c := new(C)
    return c, nil
}

func test(b B) {
    c, _ := b.Connect()
    fmt.Println("Creating A from B")
    c.Close()
}

func main() {
    d := new(D)
    test(d)
}

透過此更正,D 結構現在實現了 B介面:

func (d *D) Connect() (A, error) {
    c := new(C)
    return c, nil
}

輔助說明:

  • 介面寄養程式碼透過允許不同類型共用通用方法來實現可重複使用性。
  • 實作介面可以保證類型提供介面中定義的必要功能。
  • 確保方法實作中的參數類型至關重要符合介面規格。

以上是為什麼我的 Go struct 沒有實作介面:方法參數不符?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn