Perkongsian Jenis Data Tersuai Antara Pemalam Go dan Aplikasi
Dalam Go, adalah mungkin untuk berkongsi data antara pemalam dan aplikasi. Walau bagaimanapun, persoalan timbul sama ada boleh dilakukan untuk menaip assert ke dalam struktur data tersuai berbanding antara muka.
Taip Penegasan dengan Struktur Tersuai
Pertimbangkan senario ini:
<code class="go">// plugin.go package main type Person struct { Name string } var ( P = Person{ Name: "Emma", } )</code>
<code class="go">// app.go package main import ( "fmt" "plugin" "os" ) 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) }</code>
Apabila cuba menaip menegaskan simbol P kepada Orang dalam fail app.go, anda akan menghadapi ralat masa pelaksanaan: "Jenis simbol salah."
Penyelesaian: Pakej Jenis Biasa
Untuk mengatasi had ini, tentukan jenis data tersuai dalam pakej berasingan dan gunakannya dalam kedua-dua pemalam dan aplikasi utama.
<code class="go">// filter/filter.go package filter type Filter struct { Name string Age int }</code>
<code class="go">// plugin/main.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>
<code class="go">// app/main.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>
Dalam contoh ini, jenis Penapis ditakrifkan dalam pakej yang berasingan, menjadikannya boleh diakses oleh pemalam dan aplikasi utama. Akibatnya, taip penegasan daripada simbol pemalam kepada *penapis.Penapis berjaya.
Perhatikan bahawa:
Atas ialah kandungan terperinci ## Bolehkah Anda Menaip Tegaskan Struktur Data Tersuai dalam Pemalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!