Bagaimana untuk Berkongsi Jenis Data Tersuai Antara Pemalam Go dan Aplikasi Utama?

Patricia Arquette
Lepaskan: 2024-10-28 00:23:29
asal
801 orang telah melayarinya

How to Share Custom Data Types Between Go Plugins and the Main Application?

Perkongsian Jenis Data Tersuai dalam Pemalam Go

Dalam Go, anda boleh menentukan jenis data tersuai dalam pemalam. Walau bagaimanapun, berkongsi jenis data ini antara pemalam dan aplikasi utama memerlukan pertimbangan yang teliti.

Had Pencarian Simbol

Apabila mengakses simbol yang dieksport daripada pemalam, anda boleh taip menegaskannya ke dalam antara muka. Walau bagaimanapun, taip terus untuk menegaskannya ke dalam struct tidak boleh menggunakan carian simbol sahaja.

Jenis Data Tersuai sebagai Contoh

Mari kita pertimbangkan contoh berikut:

<code class="go">// plugin.go
package main

type Person struct {
    Name string
}

var P Person = Person{
    Name: "Emma",
}</code>
Salin selepas log masuk
<code class="go">// app.go
package main

import (
    "fmt"
    "os"
    "plugin"
)

func main() {
    plug, err := plugin.Open("./plugin.so")
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
    sym, err := plug.Lookup("P")
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
    var p Person
    p, ok := sym.(Person)
    if !ok {
        fmt.Println("Wrong symbol type")
        os.Exit(1)
    }

    fmt.Println(p.Name) // Panic: "Wrong symbol type"
}</code>
Salin selepas log masuk

Dalam contoh ini, simbol P ialah struct Orang. Walau bagaimanapun, penegasan jenis dalam apl utama gagal dengan ralat.

Penyelesaian: Definisi Jenis Asing

Kunci untuk berkongsi jenis data tersuai antara pemalam dan aplikasi utama adalah untuk menentukan jenis secara berasingan. Dengan cara ini, kedua-dua pemalam dan apl utama boleh merujuk kepada definisi jenis yang sama.

Contoh dengan Definisi Jenis Asing

<code class="go">// type.go
package filter

type Filter struct {
    Name string
    Age  int
}</code>
Salin selepas log masuk
<code class="go">// plugin.go
package main

import "play/filter"

var MyFilter filter.Filter = filter.Filter{
    Name: "Bob",
    Age:  21,
}

func CreateFilter() filter.Filter {
    return filter.Filter{
        Name: "Bob",
        Age:  21,
    }
}</code>
Salin selepas log masuk
<code class="go">// app.go
package main

import (
    "fmt"
    "log"
    "os"
    "play/filter"
    "plugin"
)

func main() {
    p, err := plugin.Open("plugin.so")
    if err != nil {
        log.Fatal(err)
    }
    mf, err := p.Lookup("MyFilter")
    if err != nil {
        log.Fatal(err)
    }
    f, ok := mf.(*filter.Filter)
    if !ok {
        log.Fatal("Wrong symbol type")
    }

    fmt.Printf("%+v\n", f) // Output: &{Name:Bob Age:21}
}</code>
Salin selepas log masuk

Dengan mentakrifkan jenis Penapis dalam pakej yang berasingan, pemalam dan apl utama boleh mengimport dan menggunakannya untuk penegasan jenis.

Atas ialah kandungan terperinci Bagaimana untuk Berkongsi Jenis Data Tersuai Antara Pemalam Go dan Aplikasi Utama?. 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!