Apabila bekerja dengan perpustakaan Gorp untuk akses pangkalan data, yang menawarkan kedua-dua jenis DbMap dan jenis Transaksi, anda mungkin menghadapi perlu memanggil kaedah pada penunjuk antara muka. Perkara ini boleh timbul apabila anda perlu melakukan pemulangan semula semasa menggunakan transaksi.
Untuk menyelesaikan isu yang dihadapi dalam sampel kod, adalah penting untuk memahami bahawa menghantar penuding kepada antara muka adalah tidak diperlukan dalam Go. Tidak seperti bahasa lain, Go tidak menggunakan panggilan melalui rujukan. Sebaliknya, menghantar penuding hanya diperlukan apabila anda perlu mengubah suai nilai asal dalam fungsi, yang biasanya tidak berlaku untuk nilai antara muka.
Masalahnya возникает kerana kaedah Dapatkan antara muka gorp.SqlExecutor mengambil masa nilai penunjuk sebagai parameter pertamanya. Walau bagaimanapun, struktur repositori anda cuba untuk memberikan nilai bukan penuding (*gorp.SqlExecutor) kepada parameter ini, menyebabkan mesej ralat.
Cara yang betul untuk menyelesaikan isu ini ialah menggunakan penuding kepada nilai antara muka secara langsung dalam panggilan kaedah. Berikut ialah kod yang diperbetulkan:
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 }
Dengan menggunakan penuding ke antara muka secara terus, anda membenarkan kaedah Dapatkan untuk mengubah suai nilai asal, yang diperlukan untuk melancarkan urus niaga.
Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat Semasa Memanggil Kaedah pada Penunjuk Antara Muka dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!