Rumah >pembangunan bahagian belakang >Golang >Mengapakah Saya Perlu Mengelak Menggunakan Penunjuk pada Nilai Antara Muka Apabila Kaedah Memanggil dalam Go?
Kaedah Memanggil pada Penunjuk Antara Muka dalam Go
Dalam Go, anda mungkin menghadapi keperluan untuk memprogramkan antara muka dan menggunakan transaksi tanpa mengubah suai anda kod. Pendekatan biasa ialah menghantar penuding kepada "objek" ke dalam sifat medan untuk membolehkan pemulangan semula jika perlu. Walau bagaimanapun, pendekatan ini boleh menyebabkan kekeliruan.
Mari kita pertimbangkan contoh kod:
package repositories import ( "github.com/coopernurse/gorp" ) type Repository struct { Gorp *gorp.SqlExecutor // Pointer to SqlExecutor } func (r *Repository) GetById(i interface{}, key interface{}) interface{} { obj, err := r.Gorp.Get(i, key) // Call method on pointer if err != nil { panic(err) } return obj }
Di sini, anda mungkin percaya bahawa anda memerlukan penuding kepada "objek" Gorp untuk melakukan pemutaran semula. Walau bagaimanapun, adalah penting untuk memahami beberapa konsep utama dalam Go:
Dalam kod contoh, walaupun anda mempunyai penuding kepada Gorp SqlExecutor, anda tidak dapat memanggil kaedah pada penuding antara muka itu sendiri. Anda sebaliknya memanggil kaedah pada nilai asas. Dalam kes ini, nilai asas ialah struct SqlExecutor.
Oleh itu, anda boleh mengalih keluar penuding dengan selamat daripada struct Repository dan hanya menghantar antara muka SqlExecutor ke Repository:
package repositories import ( "github.com/coopernurse/gorp" ) type Repository struct { Gorp gorp.SqlExecutor // Pointer removed } func (r *Repository) GetById(i interface{}, key interface{}) interface{} { obj, err := r.Gorp.Get(i, key) if err != nil { panic(err) } return obj }
Ini kod akan berfungsi seperti yang diharapkan dan membolehkan anda menggunakan transaksi tanpa mengubah suai SqlExecutor yang mendasari. Anda tidak perlu risau tentang menghantar penunjuk kepada antara muka dalam konteks ini.
Atas ialah kandungan terperinci Mengapakah Saya Perlu Mengelak Menggunakan Penunjuk pada Nilai Antara Muka Apabila Kaedah Memanggil dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!