Mendaftar Pakej dalam Go tanpa Ketergantungan Kitaran
Apabila mereka bentuk aplikasi Go, adalah penting untuk mengelakkan pergantungan kitaran antara pakej, di mana satu pakej bergantung pada yang lain, yang seterusnya bergantung pada yang pertama. Ini boleh timbul apabila mentakrifkan antara muka dan pelaksanaannya merentas berbilang pakej.
Soalan:
Bagaimanakah kami boleh mendaftarkan pelaksanaan klien tanpa mewujudkan pergantungan kitaran antara pakej pusat kami (dengan antara muka klien) dan pakej yang mengandungi pelaksanaan (cth., UDPClient, TCPClient)?
Jawapan:
Pustaka standard menawarkan dua pendekatan utama untuk menangani isu ini:
1. Tanpa Pendaftaran Pusat
Tentukan antara muka klien dalam pakej pusat. Untuk pelaksanaan, nyatakan secara eksplisit pelaksanaan yang diingini apabila menginstant klien. Contohnya:
import ( "hash/md5" "hash/sha256" ) func main() { h1 := md5.New() h2 := sha256.New() }
2. Dengan Pendaftaran Pusat
Buat mekanisme pendaftaran di mana pelaksanaan mendaftarkan diri mereka sendiri. Pendekatan ini serupa dengan pendaftaran spontan yang dibincangkan dalam soalan. Ia digunakan dalam pakej imej, di mana pelbagai penyahkod format imej (cth. GIF, JPEG, PNG) mendaftarkan diri mereka sendiri.
3. Cadangan Pendaftaran Tersuai
Perkenalkan pakej kilang berasingan yang menyediakan kaedah NewClient() untuk mencipta pelanggan. Pakej ini boleh merujuk kepada antara muka dan pakej pelaksanaan tanpa menyebabkan pergantungan bulat. Contohnya:
package pi // Client represents the client interface. type Client interface { ... }
package pa // UDPClient implements the Client interface. type UDPClient struct { ... }
package pb // TCPClient implements the Client interface. type TCPClient struct { ... }
package pf import ( "pi" "pa" "pb" ) // NewClient creates a client based on the implementation. func NewClient(impl string) pi.Client { switch impl { case "udp": return &pa.UDPClient{} case "tcp": return &pb.TCPClient{} default: panic("Unsupported implementation") } }
Atas ialah kandungan terperinci Bagaimana untuk Mendaftar Pelaksanaan Pakej Go Tanpa Membuat Ketergantungan Kitaran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!