github.com/slayercat/go@v0.0.0-20170428012452-c51559813f61/misc/cgo/testplugin/src/iface/main.go (about)

     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  }