|  | // Copyright 2017 The Go Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style | 
|  | // license that can be found in the LICENSE file. | 
|  |  | 
|  | package main | 
|  |  | 
|  | import ( | 
|  | "testplugin/iface_i" | 
|  | "log" | 
|  | "plugin" | 
|  | ) | 
|  |  | 
|  | func main() { | 
|  | a, err := plugin.Open("iface_a.so") | 
|  | if err != nil { | 
|  | log.Fatalf(`plugin.Open("iface_a.so"): %v`, err) | 
|  | } | 
|  | b, err := plugin.Open("iface_b.so") | 
|  | if err != nil { | 
|  | log.Fatalf(`plugin.Open("iface_b.so"): %v`, err) | 
|  | } | 
|  |  | 
|  | af, err := a.Lookup("F") | 
|  | if err != nil { | 
|  | log.Fatalf(`a.Lookup("F") failed: %v`, err) | 
|  | } | 
|  | bf, err := b.Lookup("F") | 
|  | if err != nil { | 
|  | log.Fatalf(`b.Lookup("F") failed: %v`, err) | 
|  | } | 
|  | if af.(func() interface{})() != bf.(func() interface{})() { | 
|  | panic("empty interfaces not equal") | 
|  | } | 
|  |  | 
|  | ag, err := a.Lookup("G") | 
|  | if err != nil { | 
|  | log.Fatalf(`a.Lookup("G") failed: %v`, err) | 
|  | } | 
|  | bg, err := b.Lookup("G") | 
|  | if err != nil { | 
|  | log.Fatalf(`b.Lookup("G") failed: %v`, err) | 
|  | } | 
|  | if ag.(func() iface_i.I)() != bg.(func() iface_i.I)() { | 
|  | panic("nonempty interfaces not equal") | 
|  | } | 
|  | } |