## Can You Type Assert a Custom Data Type From a Go Plugin?
Can You Share a Custom Data Type Between a Go Plugin and Application?
In Go plugin development, one can seek to interface with a custom data type defined in a plugin from the main application. While it's feasible to retrieve exported symbols and represent them as interfaces, the question arises: can we type assert them into custom structs?
The direct answer is negative, as the main package cannot access identifiers defined in other packages. Hence, the exported identifier in the plugin cannot share the same type with the application. Even with identical Person type definitions in both plugin and application, type assertion fails due to their inherent distinction.
But, there's a workaround. Definining the type in a separate package allows its use in both plugin and application. This enables type assertion of the custom struct.
Here's an example:
Custom type definition:
<code class="go">package filter type Filter struct { Name string Age int }</code>
Plugin code:
<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>
Main application:
<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>
Running this showcases the successful type assertion and retrieval of data:
&{Name:Bob Age:21}
It's essential to note the type difference between exported identifiers in the plugin (variable type for MyFilter, function type for CreateFilter) and the type of symbols obtained when looked up from the plugin (pointer type for variables, same type for functions).
By utilizing this approach, developers can share custom data types between Go plugins and applications, facilitating efficient inter-component communication.
The above is the detailed content of ## Can You Type Assert a Custom Data Type From a Go Plugin?. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

OpenSSL, as an open source library widely used in secure communications, provides encryption algorithms, keys and certificate management functions. However, there are some known security vulnerabilities in its historical version, some of which are extremely harmful. This article will focus on common vulnerabilities and response measures for OpenSSL in Debian systems. DebianOpenSSL known vulnerabilities: OpenSSL has experienced several serious vulnerabilities, such as: Heart Bleeding Vulnerability (CVE-2014-0160): This vulnerability affects OpenSSL 1.0.1 to 1.0.1f and 1.0.2 to 1.0.2 beta versions. An attacker can use this vulnerability to unauthorized read sensitive information on the server, including encryption keys, etc.

Backend learning path: The exploration journey from front-end to back-end As a back-end beginner who transforms from front-end development, you already have the foundation of nodejs,...

Queue threading problem in Go crawler Colly explores the problem of using the Colly crawler library in Go language, developers often encounter problems with threads and request queues. �...

The library used for floating-point number operation in Go language introduces how to ensure the accuracy is...

Under the BeegoORM framework, how to specify the database associated with the model? Many Beego projects require multiple databases to be operated simultaneously. When using Beego...

The difference between string printing in Go language: The difference in the effect of using Println and string() functions is in Go...

The problem of using RedisStream to implement message queues in Go language is using Go language and Redis...

What should I do if the custom structure labels in GoLand are not displayed? When using GoLand for Go language development, many developers will encounter custom structure tags...
