Rumah  >  Artikel  >  pembangunan bahagian belakang  >  ## Bolehkah Anda Menaip Tegaskan Jenis Data Tersuai Daripada Pemalam Go?

## Bolehkah Anda Menaip Tegaskan Jenis Data Tersuai Daripada Pemalam Go?

Patricia Arquette
Patricia Arquetteasal
2024-10-26 18:48:03820semak imbas

## Can You Type Assert a Custom Data Type From a Go Plugin?

Bolehkah Anda Berkongsi Jenis Data Tersuai Antara Pemalam dan Aplikasi Go?

Dalam pembangunan pemalam Go, seseorang boleh mencari antara muka dengan jenis data tersuai yang ditakrifkan dalam pemalam dari aplikasi utama. Walaupun boleh dilakukan untuk mendapatkan semula simbol yang dieksport dan mewakilinya sebagai antara muka, persoalan timbul: bolehkah kita menaip menegaskannya ke dalam struct tersuai?

Jawapan langsung adalah negatif, kerana pakej utama tidak boleh mengakses pengecam yang ditakrifkan dalam pakej lain. Oleh itu, pengecam yang dieksport dalam pemalam tidak boleh berkongsi jenis yang sama dengan aplikasi. Walaupun dengan takrifan jenis Orang yang sama dalam kedua-dua pemalam dan aplikasi, penegasan jenis gagal disebabkan perbezaan yang wujud.

Tetapi, ada penyelesaiannya. Menentukan jenis dalam pakej berasingan membolehkan penggunaannya dalam kedua-dua pemalam dan aplikasi. Ini membolehkan penegasan jenis struct tersuai.

Berikut ialah contoh:

Takrif jenis tersuai:

<code class="go">package filter

type Filter struct {
    Name string
    Age  int
}</code>

Kod pemalam:

<code class="go">package main

import (
    "play/filter"
)

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

func CreateFilter() filter.Filter {
    return filter.Filter{
        Name: "Bob",
        Age:  21,
    }
}</code>

Aplikasi utama:

<code class="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)
}</code>

Menjalankan ini mempamerkan penegasan jenis yang berjaya dan mendapatkan semula data:

&{Name:Bob Age:21}

Adalah penting untuk diperhatikan perbezaan jenis antara pengecam yang dieksport dalam pemalam (jenis pembolehubah untuk Penapis Saya, jenis fungsi untuk CreateFilter) dan jenis simbol yang diperoleh apabila dilihat daripada pemalam (jenis penunjuk untuk pembolehubah, jenis yang sama untuk fungsi).

Dengan menggunakan pendekatan ini, pembangun boleh berkongsi jenis data tersuai antara pemalam dan aplikasi Go, memudahkan komunikasi antara komponen yang cekap.

Atas ialah kandungan terperinci ## Bolehkah Anda Menaip Tegaskan Jenis Data Tersuai Daripada Pemalam Go?. 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