Home | History | Annotate | Download | only in iface
      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