Rumah pembangunan bahagian belakang Golang Apakah hubungan antara jenis dan antara muka dalam bahasa Go

Apakah hubungan antara jenis dan antara muka dalam bahasa Go

Jan 06, 2023 pm 07:52 PM
golang antara muka pergi bahasa

Dalam bahasa Go, terdapat hubungan satu-dengan-banyak dan banyak-dengan-satu antara jenis dan antara muka. Satu jenis boleh melaksanakan berbilang antara muka pada masa yang sama, dan antara muka adalah bebas antara satu sama lain dan tidak mengetahui pelaksanaan satu sama lain. Pelbagai jenis juga boleh melaksanakan antara muka yang sama: kaedah antara muka tidak semestinya perlu dilaksanakan sepenuhnya oleh jenis. Kaedah antara muka boleh dilaksanakan dengan membenamkan jenis atau struktur lain dalam jenis. Dalam erti kata lain, pengguna tidak peduli sama ada kaedah antara muka dilaksanakan sepenuhnya melalui satu jenis, atau sama ada ia dilaksanakan melalui berbilang struktur yang tertanam dalam struktur dan disatukan.

Apakah hubungan antara jenis dan antara muka dalam bahasa Go

Persekitaran pengendalian tutorial ini: sistem Windows 7, GO versi 1.18, komputer Dell G3.

Hubungan antara jenis dan antara muka bahasa Go

Dalam bahasa Go, terdapat satu-dengan-banyak dan banyak-dengan-satu hubungan antara jenis dan antara muka Konsep biasa ini akan disenaraikan di bawah untuk memudahkan pembaca memahami hubungan pelaksanaan antara antara muka dan jenis dalam persekitaran yang kompleks.

Sesuatu jenis boleh melaksanakan berbilang antara muka

Sesuatu jenis boleh melaksanakan berbilang antara muka pada masa yang sama, dan antara muka adalah bebas antara satu sama lain dan tidak mengetahui pelaksanaan satu sama lain .

Dua program pada rangkaian bertukar data melalui sambungan komunikasi dua hala Satu hujung sambungan dipanggil Soket. Soket boleh membaca dan menulis data pada masa yang sama, ciri ini serupa dengan fail. Oleh itu, semasa pembangunan, ciri membaca dan menulis kedua-dua fail dan Soket disarikan ke dalam konsep pembaca dan penulis bebas.

Soket, seperti fail, juga perlu mengeluarkan sumber selepas digunakan.

Ciri-ciri Socket yang boleh menulis data dan perlu ditutup diterangkan menggunakan antara muka Sila rujuk kod berikut:

type Socket struct {
}
func (s *Socket) Write(p []byte) (n int, err error) {
    return 0, nil
}
func (s *Socket) Close() error {
    return nil
}
Salin selepas log masuk

Kaedah Write() bagi struktur Soket yang dilaksanakan. antara muka io.Writer :

type Writer interface {
    Write(p []byte) (n int, err error)
}
Salin selepas log masuk

Pada masa yang sama, struktur Socket juga melaksanakan antara muka io.Closer:

type Closer interface {
    Close() error
}
Salin selepas log masuk

Menggunakan kod antara muka Writer yang dilaksanakan oleh Socket , tidak perlu mengetahui sama ada pelaksana antara muka Penulis mempunyai ciri Antara Muka Lebih Dekat. Begitu juga, kod yang menggunakan antara muka Closer tidak mengetahui bahawa Soket telah melaksanakan antara muka Penulis, seperti yang ditunjukkan dalam rajah berikut.

Apakah hubungan antara jenis dan antara muka dalam bahasa Go
Rajah: Proses penggunaan dan pelaksanaan antara muka

Antara muka Writer dan kod antara muka Closer yang dilaksanakan menggunakan struktur Soket dalam kod adalah seperti berikut:

// 使用io.Writer的代码, 并不知道Socket和io.Closer的存在
func usingWriter( writer io.Writer){
    writer.Write( nil )
}
// 使用io.Closer, 并不知道Socket和io.Writer的存在
func usingCloser( closer io.Closer) {
    closer.Close()
}
func main() {
    // 实例化Socket
    s := new(Socket)
    usingWriter(s)
    usingCloser(s)
}
Salin selepas log masuk

usingWriter() dan usingCloser() adalah bebas sepenuhnya Mereka tidak mengetahui kewujudan satu sama lain, dan mereka juga tidak tahu bahawa antara muka yang mereka gunakan dilaksanakan oleh Socket.

Berbilang jenis boleh melaksanakan antara muka yang sama

Kaedah antara muka tidak semestinya perlu dilaksanakan sepenuhnya oleh satu jenis Kaedah antara muka boleh dibenamkan dalam jenis lain dalam jenis atau struktur. Dalam erti kata lain, pengguna tidak peduli sama ada kaedah antara muka dilaksanakan sepenuhnya melalui satu jenis, atau sama ada ia dilaksanakan melalui berbilang struktur yang tertanam dalam struktur dan disatukan.

Antara muka Perkhidmatan mentakrifkan dua kaedah: satu adalah untuk memulakan perkhidmatan (Start()), dan satu lagi adalah untuk mengeluarkan log (Log()). Gunakan struktur GameService untuk melaksanakan struktur GameService sendiri hanya boleh melaksanakan kaedah Start() dan kaedah Log() dalam antara muka Perkhidmatan telah dilaksanakan oleh logger (Logger) yang boleh mengeluarkan log GameService. Atau laksanakannya semula. Oleh itu, memilih untuk membenamkan Logger ke dalam GameService boleh mengelakkan redundansi kod dan memudahkan struktur kod sepenuhnya. Proses pelaksanaan terperinci adalah seperti berikut:

// 一个服务需要满足能够开启和写日志的功能
type Service interface {
    Start()  // 开启服务
    Log(string)  // 日志输出
}
// 日志器
type Logger struct {
}
// 实现Service的Log()方法
func (g *Logger) Log(l string) {
}
// 游戏服务
type GameService struct {
    Logger  // 嵌入日志器
}
// 实现Service的Start()方法
func (g *GameService) Start() {
}
Salin selepas log masuk

Penerangan kod adalah seperti berikut:

  • Barisan 2 mentakrifkan antara muka perkhidmatan perlu melaksanakan Mula () kaedah dan kaedah pembalakan.

  • Barisan 8 mentakrifkan struktur pembalak yang boleh mengeluarkan log.

  • Baris 12, tambahkan kaedah Log() pada Logger dan laksanakan kaedah Log() Perkhidmatan.

  • Barisan 17, mentakrifkan struktur GameService.

  • Barisan 18, benamkan logger Logger dalam GameService untuk melaksanakan fungsi pengelogan.

  • Barisan 22, kaedah Mula() GameService melaksanakan kaedah Mula() Perkhidmatan.

Pada ketika ini, nyatakan GameService dan tetapkan contoh kepada Perkhidmatan Kod adalah seperti berikut:

var s Service = new(GameService)
s.Start()
s.Log(“hello”)
Salin selepas log masuk

s Anda boleh menggunakan kaedah Start() dan. Kaedah Log(), antaranya Start() dilaksanakan oleh GameService dan kaedah Log() dilaksanakan oleh Logger.

[Cadangan berkaitan: Pergi tutorial video, Pengajaran pengaturcaraan]

Atas ialah kandungan terperinci Apakah hubungan antara jenis dan antara muka dalam bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Perpustakaan apa yang digunakan untuk operasi nombor terapung di GO? Perpustakaan apa yang digunakan untuk operasi nombor terapung di GO? Apr 02, 2025 pm 02:06 PM

Perpustakaan yang digunakan untuk operasi nombor terapung dalam bahasa Go memperkenalkan cara memastikan ketepatannya ...

Apakah masalah dengan thread giliran di crawler colly go? Apakah masalah dengan thread giliran di crawler colly go? Apr 02, 2025 pm 02:09 PM

Masalah Threading Giliran di GO Crawler Colly meneroka masalah menggunakan Perpustakaan Colly Crawler dalam bahasa Go, pemaju sering menghadapi masalah dengan benang dan permintaan beratur. � ...

Apakah perbezaan antara struktur definisi kata kunci `var` dan` type` dalam bahasa Go? Apakah perbezaan antara struktur definisi kata kunci `var` dan` type` dalam bahasa Go? Apr 02, 2025 pm 12:57 PM

Dua cara untuk menentukan struktur dalam bahasa Go: perbezaan antara VAR dan jenis kata kunci. Apabila menentukan struktur, pergi bahasa sering melihat dua cara menulis yang berbeza: pertama ...

Di Go, mengapa rentetan percetakan dengan fungsi println dan rentetan () mempunyai kesan yang berbeza? Di Go, mengapa rentetan percetakan dengan fungsi println dan rentetan () mempunyai kesan yang berbeza? Apr 02, 2025 pm 02:03 PM

Perbezaan antara percetakan rentetan dalam bahasa Go: perbezaan kesan menggunakan fungsi println dan rentetan () sedang ...

Perpustakaan mana yang dibangunkan oleh syarikat besar atau disediakan oleh projek sumber terbuka yang terkenal? Perpustakaan mana yang dibangunkan oleh syarikat besar atau disediakan oleh projek sumber terbuka yang terkenal? Apr 02, 2025 pm 04:12 PM

Perpustakaan mana yang dibangunkan oleh syarikat besar atau projek sumber terbuka yang terkenal? Semasa pengaturcaraan di GO, pemaju sering menghadapi beberapa keperluan biasa, ...

Apa yang perlu saya lakukan jika label struktur tersuai di Goland tidak dipaparkan? Apa yang perlu saya lakukan jika label struktur tersuai di Goland tidak dipaparkan? Apr 02, 2025 pm 05:09 PM

Apa yang perlu saya lakukan jika label struktur tersuai di Goland tidak dipaparkan? Apabila menggunakan Goland untuk Pembangunan Bahasa GO, banyak pemaju akan menghadapi tag struktur tersuai ...

Bagaimana menyelesaikan masalah penukaran jenis user_id semasa menggunakan aliran redis untuk melaksanakan beratur mesej dalam bahasa Go? Bagaimana menyelesaikan masalah penukaran jenis user_id semasa menggunakan aliran redis untuk melaksanakan beratur mesej dalam bahasa Go? Apr 02, 2025 pm 04:54 PM

Masalah menggunakan redisstream untuk melaksanakan beratur mesej dalam bahasa Go menggunakan bahasa Go dan redis ...

Bagaimana untuk menyelesaikan masalah kekangan jenis fungsi generik Golang yang dipadamkan secara automatik dalam vscode? Bagaimana untuk menyelesaikan masalah kekangan jenis fungsi generik Golang yang dipadamkan secara automatik dalam vscode? Apr 02, 2025 pm 02:15 PM

Penghapusan automatik Golang Generik Jenis Kekangan Jenis dalam Pengguna VSCode mungkin menghadapi masalah yang aneh ketika menulis kod Golang menggunakan vscode. Bila ...

See all articles