Rumah >pembangunan bahagian belakang >Golang >Mengapa Fungsi Go Tidak Mengembalikan Penunjuk Struktur Secara Automatik Melaksanakan Antara Muka?

Mengapa Fungsi Go Tidak Mengembalikan Penunjuk Struktur Secara Automatik Melaksanakan Antara Muka?

Linda Hamilton
Linda Hamiltonasal
2024-12-20 13:13:13322semak imbas

Why Doesn't a Go Function Returning a Struct Pointer Automatically Implement an Interface?

Pelaksanaan Antara Muka dalam Go: Jenis Fungsi Memulangkan Struktur

Apabila bekerja dengan Go, adalah perkara biasa untuk menghadapi situasi di mana fungsi mengembalikan struct yang melaksanakan antara muka. Walau bagaimanapun, anda mungkin menghadapi ralat yang serupa dengan "tidak boleh menggunakan [fungsi] sebagai jenis [antara muka] dalam nilai medan" apabila cuba untuk menetapkan fungsi kepada medan yang menjangkakan contoh antara muka.

Untuk memahami perkara ini ralat, adalah penting untuk menjelaskan bahawa fungsi yang mengembalikan penunjuk kepada struct (struct) tidak secara automatik melaksanakan antara muka yang ditakrifkan untuk struct tersebut. Dalam erti kata lain, struct dan struct ialah jenis yang berbeza dalam Go.

Dalam contoh yang diberikan, fungsi getInstance dijangka akan mengembalikan nilai jenis myInterface, yang merupakan perihalan tingkah laku (antara muka) dan bukannya pelaksanaan tertentu (struktur). Walau bagaimanapun, getInstance mengembalikan penunjuk kepada pelaksanaan myStruct (*myStruct), yang tidak serasi jenis dengan myInterface.

Untuk menyelesaikannya isu ini, anda perlu mengubah suai getInstance untuk mengembalikan tika myStruct struct, seperti yang dilihat dalam kod yang diperbetulkan di bawah:

package main

import "fmt"

func main() {
    var function func() myInterface

    function = getInstance

    newSomething := function()

    newSomething.doSomething()
}

type myInterface interface {
    doSomething()
}

type myStruct struct{}

func (m *myStruct) doSomething() {
    fmt.Println("doing something")
}

func getInstance() myInterface {
    return &myStruct{}
}

Pengubahsuaian ini memastikan myStruct melaksanakan antara muka myInterface dan Fungsi getInstance mengembalikan fungsi yang betul taip.

Semasa pendekatan di atas berfungsi, Go telah mencadangkan perubahan bahasa untuk menukar secara automatik fungsi mengembalikan jenis konkrit kepada fungsi mengembalikan antara muka jika jenis konkrit melaksanakan antara muka. Walau bagaimanapun, cadangan ini ditolak kerana potensi prestasi dan kebimbangan keselamatan.

Atas ialah kandungan terperinci Mengapa Fungsi Go Tidak Mengembalikan Penunjuk Struktur Secara Automatik Melaksanakan Antara Muka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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