1 // Copyright 2017 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package main 6 7 import ( 8 "iface_i" 9 "log" 10 "plugin" 11 ) 12 13 func main() { 14 a, err := plugin.Open("iface_a.so") 15 if err != nil { 16 log.Fatalf(`plugin.Open("iface_a.so"): %v`, err) 17 } 18 b, err := plugin.Open("iface_b.so") 19 if err != nil { 20 log.Fatalf(`plugin.Open("iface_b.so"): %v`, err) 21 } 22 23 af, err := a.Lookup("F") 24 if err != nil { 25 log.Fatalf(`a.Lookup("F") failed: %v`, err) 26 } 27 bf, err := b.Lookup("F") 28 if err != nil { 29 log.Fatalf(`b.Lookup("F") failed: %v`, err) 30 } 31 if af.(func() interface{})() != bf.(func() interface{})() { 32 panic("empty interfaces not equal") 33 } 34 35 ag, err := a.Lookup("G") 36 if err != nil { 37 log.Fatalf(`a.Lookup("G") failed: %v`, err) 38 } 39 bg, err := b.Lookup("G") 40 if err != nil { 41 log.Fatalf(`b.Lookup("G") failed: %v`, err) 42 } 43 if ag.(func() iface_i.I)() != bg.(func() iface_i.I)() { 44 panic("nonempty interfaces not equal") 45 } 46 } 47