首頁 >後端開發 >Golang >為什麼在 Go 中呼叫介面指標方法時會出現錯誤?

為什麼在 Go 中呼叫介面指標方法時會出現錯誤?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-08 22:50:11993瀏覽

Why Do I Get Errors When Calling Methods on Interface Pointers in Go?

在Go 中呼叫介面指標上的方法

使用Gorp 庫進行資料庫存取時(它同時提供DbMap 類型和Transaction 類型),您可能會遇到需要呼叫接口指標上的方法。當您在使用交易時需要執行回溯時,可能會發生這種情況。

要解決程式碼範例中遇到的問題,重要的是要了解在 Go 中不需要傳遞指向介面的指標。與其他語言不同,Go 不使用引用呼叫。相反,僅當您需要修改函數內的原始值時才需要傳遞指針,這通常不是介面值的情況。

問題所在,因為 gorp.SqlExecutor 介面的 Get 方法需要一個指標值作為其第一個參數。但是,您的儲存庫結構嘗試為該參數指派非指標值(*gorp.SqlExecutor),從而導致錯誤訊息。

解決此問題的正確方法是使用指向介面值的指標直接在方法呼叫中。修正後的程式碼如下:

package repositories

import (
    "github.com/coopernurse/gorp"
)

type Repository struct {
    Gorp gorp.SqlExecutor
}

func (r *Repository) GetById(i interface{}, key interface{}) interface{} {
    obj, err := r.Gorp.Get(i, key)
    if err != nil {
        panic(err)
    }
    return obj
}

透過直接使用指向介面的指針,您允許 Get 方法修改原始值,這是回滾事務所必需的。

以上是為什麼在 Go 中呼叫介面指標方法時會出現錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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