editor php Baicao ada di sini untuk memperkenalkan kepada anda kaedah menukar nilai antara muka melalui rujukan. Dalam pengaturcaraan, kadangkala kita perlu menukar parameter fungsi atau kaedah, tetapi kita tidak mahu terus mengembalikan nilai baharu, tetapi mahu mengubah suai nilai asal melalui rujukan. Dalam kes ini, kita boleh menggunakan parameter rujukan. Dengan merujuk parameter, kita boleh mengubah suai nilai pembolehubah yang diluluskan terus di dalam fungsi tanpa mengembalikan nilai baharu. Pendekatan ini meningkatkan prestasi dan menjadikan kod lebih ringkas dan boleh dibaca. Dalam artikel seterusnya, kami akan menerangkan secara terperinci cara menggunakan parameter rujukan untuk menukar nilai antara muka.
package main import ( "fmt" ) // -------- library code. can't change ------------ type client struct { transport roundtripper } type roundtripper interface { do() } type transport struct{} func (d transport) do() {} var defaulttransport roundtripper = transport{} // -------- my code. can change ------------ func changetransport(r roundtripper) { if r == nil { fmt.println("transport is nil") r = defaulttransport } } func main() { c := client{} changetransport(c.transport) fmt.println(c.transport) }
Keluaran:
transport is nil <nil>
Dijangka:
transport is nil {}
Taman permainan
Saya juga mencuba ini berdasarkan https://stackoverflow.com/a/44905592/6740589:
func changetransport(r roundtripper) { if r == nil { fmt.println("transport is nil") d, ok := defaulttransport.(transport) if !ok { log.fatal("impossible") } if t, ok := r.(*transport); ok { t = &d fmt.println("ignoreme", t) } else { log.fatal("uff") } } }
Keluaran:
transport is nil 2009/11/10 23:00:00 Uff
Taman Permainan
Gunakan roundtripper
接口的指针作为changetransport
parameter fungsi untuk menukar nilai penunjuk:
// -------- my code. can change ------------ func changetransport(r *roundtripper) { if r != nil && *r == nil { fmt.println("transport is nil") *r = defaulttransport } } func main() { c := client{} changetransport(&c.transport) fmt.println(c.transport) }
transport is nil {}
Atas ialah kandungan terperinci Tukar nilai antara muka dengan rujukan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!