Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mendaftar Pelaksanaan Pakej Go Tanpa Membuat Ketergantungan Kitaran?

Bagaimana untuk Mendaftar Pelaksanaan Pakej Go Tanpa Membuat Ketergantungan Kitaran?

Barbara Streisand
Lepaskan: 2024-12-29 14:01:10
asal
185 orang telah melayarinya

How to Register Go Package Implementations Without Creating Cyclic Dependencies?

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()
}
Salin selepas log masuk

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 { ... }
Salin selepas log masuk
package pa

// UDPClient implements the Client interface.
type UDPClient struct { ... }
Salin selepas log masuk
package pb

// TCPClient implements the Client interface.
type TCPClient struct { ... }
Salin selepas log masuk
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")
    }
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan